Java 抽象 class 传递扩展基础的子对象中的任何一个 class

Java abstract class pass either of the child object that extend the base class

我有一个抽象 class,我想在其中创建一个方法,该方法可以传递给扩展它的任一子实例。

例如:

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

我觉得有多种方法可以解决这个问题。是否有可能了解可能的方法是什么?我绝对不想在所有子 classes.

中创建相同的函数

看来这就是您要找的东西。

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

然后,如果您想在 child 类 中覆盖 doSomething。 事实上,您甚至不需要 base 参数并传递 this,您已经有了对 this 的隐式引用。

继承背后的思想之一是在相同抽象类型的 class 之间共享行为。

因此,如果您希望基 class 的所有子类型都具有相同的行为,请在基 class 中实现该方法。您不需要传递对象引用,使用 this 关键字。

如果您想要在您的子 classes 中有不同的行为,请在您的基础 class 中声明方法抽象并在各种子 classes 中实现每个行为。

我不确定传递给 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);
    }
}