抽象类实现接口,可以实现接口方法确定子类扩展抽象超类吗?

时间:2014-06-04 15:58:12

标签: java interface

给定一个界面:

public interface GoAlgorithm
{
  public void go();
}

实现接口的类:

public class GoByFlyingFast implements GoAlgorithm
{
  public void go()
  {
    System.out.println("Now I'm flying FAAAAST. Woo-hoo!");
  }
}

抽象类

public abstract class Vehicle
{
  private GoAlgorithm goAlgorithm;

  public Vehicle()
  {
    System.out.printf("A new vehicle has entered the race! \n");
  }

  public void setGoAlgorithm(GoAlgorithm algorithm)
  {
    this.goAlgorithm = algorithm;
  }

  public void go()
  {
    this.goAlgorithm.go();
  }
}

扩展抽象类的类:

public class Tomcat extends Vehicle
{
  public Tomcat()
  {
    setGoAlgorithm(new GoByFlyingFast());
  }
}

(傻瓜设计模式中的代码示例)

在抽象类的接口方法实现中,有没有办法确定调用接口方法的对象的子类?

可以go()确定Tomcat对象是否正在调用Vehicle类定义的go()方法吗?

如果已经提出这个问题,请道歉。正如这个问题的标题所证明的那样,我正在努力简明扼要地提出我的问题。

谢谢!

编辑:纯粹的好奇心问题

1 个答案:

答案 0 :(得分:1)

理论上是的。您可以使用Thread.getStackTrace()获取当前堆栈跟踪,分析它并查看调用方的动态类。但是,这将是非常糟糕的设计。

或者,您可以让子类实现一个getName()函数,该函数返回其类名,以便您可以在超类中访问它。

在任何情况下,如果您的(抽象)类不根据哪个类进行子类化来改变它们的行为,那么这是一个很好的设计。因此,不需要获取此类信息。