簡體   English   中英

如何從父類調用指定的方法?

[英]How to calling specified method from parent class?

我有2個類從同一個父類擴展。 在這些類中,我有相同名稱但實現不同的方法。 有沒有辦法從其父類調用此特定方法? 請在下面找到示例代碼

public class Fruit {

    public String callingName () {
        //calling specified method getTaste() here 
       // return specified value;
    }
}



public class Orange extends Fruit{
    private String getTaste(){
        return "Orange has sour taste";
    }
}

public class Banana extends Fruit{
    private String getTaste(){
        return "Banana has sweet taste";
    }
}

在這種情況下,我沒有任何參考香蕉或橙色。 Fruit類本身必須決定從callName()方法調用哪個是正確的getTaste()。 謝謝你的幫助。

是的,使用抽象類

public abstract class Fruit {

    protected abstract String getTaste();

    public String callingName () {
         String taste = getTaste(); //calling specified method getTaste() here 
        // return specified value; 
    }
}

您必須在每個類中保護getTaste()。

嘗試使用工廠模式的概念:

public String callingName (String fruit) {
        switch(fruit){
        case "Orange" :
         return new Orange().getTaste();
        case "Banana" :
            return new Banana().getTaste();
        }
    }

在這里,您不需要將Fruit類創建為抽象,您可以創建它的對象。

實行

public abstract class Fruit {
    public abstract String getTaste ();
    public String callingName () {
        //calling specified method getTaste() here 
       // return specified value;
    }
}

我看到的最好方法是將Fruit改為抽象,因為你不太可能實例化它。

給它一個名為name的受保護屬性和一個相關的方法(我使用getName而不是callingName來遵循約定)。

橙色香蕉的構造,只是右邊的值賦給屬性名稱 ,並覆蓋GetName方法。

因此:

public abstract class Fruit {
    protected String name;
    public String getName() {
        return name;
    }
}


public class Banana extends Fruit {
    public Banana() {
        name = "Banana";
    }
    public String getName() {
        return super.getName();
    }
}

它是Java繼承的內置功能。 如果擴展類的實例是up-casted,則調用其方法,仍將調用其原始方法。 它也是Java中面向對象實現的基本概念。

class Fruit {
    protected String callingTaste() {
        return "";
    }

    public String callingName() {
        return callingTaste();
    }
}

您可以使用以下示例測試上述概念:

class FruitProducer {
    public static Fruit[] produce() {
        Fruit[] list = new Fruit[] { new Orange(), new Banana() };
        return list;
    }
}

class UnknownClient {
    public static void main(String args[]) {
        Fruit[] listOfFruit = FruitProducer.produce();
        foreach (Fruit f : listOfFruit) {
            f.callingName(); 
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM