Java中的OOP:带方法链的类继承
我有一个父类,它定义了链表方法(返回“this”的方法)的集合。我想定义多个子类,这些子类包含它们自己的链表方法,但也“覆盖”父类方法,以便返回子类的实例而不是父类
我不想在每个子类中重复相同的方法,这就是为什么我有一个包含所有子类共享的方法的父类。谢谢
class Chain {
public Chain foo(String s){
...
return this;
}
}
class ChainChild extends Chain {
//I don't want to add a "foo" method to each child class
/*
public ChildChain foo(String s){
...
return this;
}
*/
public ChainChild bar(boolean b){
...
return this;
}
}
ChainChild child = new ChainChild();
child.foo().bar(); //compile error: foo() returns a "Chain" object which does not define the bar() method.
# 1 楼答案
我已经根据您的需要使用泛型编写了这个示例
# 2 楼答案
父类中返回
你可以考虑使用这样的泛型:this
的方法仍将返回对子类对象的引用。您只能将其视为父类的对象(除非强制转换),但它实际上是其原始类型# 3 楼答案
你可以直接投
你可以试试:
但我不确定这是否有帮助,即使它可以编译
# 4 楼答案
以下是对OldCurmudgeon方法的改进:
改进是只进行一次未检查的强制转换,并将其保存为常量THIS,您可以将其作为方法链接的返回值重用
这将删除每个方法中未检查的强制类型转换,并使代码更清晰
您可以通过返回子对象而不是此(协变返回类型)来重写父对象的方法