给定一个界面:
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()方法吗?
如果已经提出这个问题,请道歉。正如这个问题的标题所证明的那样,我正在努力简明扼要地提出我的问题。
谢谢!
编辑:纯粹的好奇心问题
答案 0 :(得分:1)
理论上是的。您可以使用Thread.getStackTrace()
获取当前堆栈跟踪,分析它并查看调用方的动态类。但是,这将是非常糟糕的设计。
或者,您可以让子类实现一个getName()
函数,该函数返回其类名,以便您可以在超类中访问它。
在任何情况下,如果您的(抽象)类不根据哪个类进行子类化来改变它们的行为,那么这是一个很好的设计。因此,不需要获取此类信息。