簡體   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