gpt4 book ai didi

java - 将派生类传递给需要覆盖期望基类的方法

转载 作者:太空狗 更新时间:2023-10-29 22:52:08 25 4
gpt4 key购买 nike

我有一个类 A,它有一个抽象方法 doAction(BaseClass obj),需要一个 BaseClass 类型的参数

public class A {
//....
abstract void doAction(BaseClass obj);
//....
}

现在,我有另一个需要扩展 A 的类 B。但是,B 的 doAction 方法需要使用一个扩展了 BaseClass 的对象 DerivedClass。

public class B extends class A {
//..
void doAction(DerivedClass obj) {
obj.callMethodAvailableOnlyInDerivedClass();
}

}

我如何处理这种情况,我需要将类型为 DerivedClass 的参数传递给要重写的方法,同时它需要一个 BaseClass ?

谢谢!

最佳答案

你使基类泛化:

public class A<T extends BaseClass> {
//....
abstract void doAction(T obj);
//....
}

以及用派生类参数化的子类:

public class B extends A<DerivedClass> {
//..
void doAction(DerivedClass obj) {
obj.callMethodAvailableOnlyInDerivedClass();
}
}

如果没有泛型,这是不可能的,因为 B 会破坏 A 的契约:A 接受任何类型的 BaseClass,但您限制 B 只接受特定的子类。这不尊重 Liskov principle .

关于java - 将派生类传递给需要覆盖期望基类的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9421247/

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