繁体   English   中英

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

[英]Java abstract class pass either of the child object that extend the base 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);
    }
}

我觉得有多种解决方法。 是否可能了解可能的方法? 我绝对不想在所有子类中创建相同的函数。

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

看起来这就是您想要的。

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的隐式引用。

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

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

如果要在子类中使用不同的行为,请在基类中声明方法abstract,并在各个子类中实现每种行为。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM