gpt4 book ai didi

java - 抽象类实现接口(interface),接口(interface)方法的实现是否可以决定子类扩展抽象父类(super class)?

转载 作者:太空宇宙 更新时间:2023-11-04 06:45:31 26 4
gpt4 key购买 nike

给定一个接口(interface):

public interface GoAlgorithm
{
public void go();
}

实现接口(interface)的类:

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());
}
}

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

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

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

如果这个问题已经被提出,我们深表歉意。正如这个问题的标题所证明的,我很难简洁地表达我的问题。

谢谢!

编辑:纯粹的好奇心问题

最佳答案

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

或者,您可以让子类实现 getName() 函数,该函数返回它们的类名,以便您可以在父类(super class)中访问它。

无论如何,如果您的(抽象)类不会根据子类化它们的类来更改其行为,那么这是一个很好的设计。所以应该没有必要获取此类信息。

关于java - 抽象类实现接口(interface),接口(interface)方法的实现是否可以决定子类扩展抽象父类(super class)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24042181/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com