[英]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.