我有一个抽象类,我想创建一个方法,可以传递扩展它的子实例。
例如:
abstract class base
{
public void doSomething(Child1 or Child2){
}
}
class Child1 extends base
{
public void somefunc(){
doSomething(Child1);
}
}
class Child2 extends base
{
public void somefunc(){
doSomething(Child2);
}
}
我觉得有多种方法可以解决它。是否有可能了解可能的方法是什么?我绝对不想在所有子类中创建相同的函数。
答案 0 :(得分:2)
我不确定传递给doSomething
的参数应该是this
,还是相同类型的单独对象。在第一种情况下,peter.petrov的答案就是你想要的。在第二种情况下,解决此问题的标准方法是使Base
通用并使用递归绑定。
abstract class Base<T extends Base<T>> {
public void doSomething(T t) {}
}
class Child1 extends Base<Child1> {
public void someFunc() {
Child1 child1 = new Child1();
doSomething(child1);
}
}
class Child2 extends Base<Child2> {
public void someFunc() {
Child2 child2 = new Child2();
doSomething(child2);
}
}
答案 1 :(得分:0)
似乎这就是你正在寻找的东西。
abstract class base
{
public void doSomething(base obj){
}
}
class Child1 extends base
{
public void somefunc(){
doSomething(this);
}
}
class Child2 extends base
{
public void somefunc(){
doSomething(this);
}
}
然后,如果要在子类中覆盖doSomething
。
实际上,您甚至不需要base
参数并通过this
,您已经隐含了对this
的引用。
答案 2 :(得分:0)
继承背后的一个想法是在相同抽象类型的类之间共享行为。
因此,如果您希望基类的所有子类型具有相同的行为,请在基类中实现该方法。您无需传递对象引用,请使用this
关键字。
如果您想在子类中使用不同的行为,请在基类中声明方法abstract,并实现各个子类中的每个行为。