2016-02-29 135 views
-1

我搜索了這個網站,和其他人幾個小時無濟於事。目前,我正在繼承並且在路上遇到了一些麻煩。我有一個名爲植物的超級類,它有子類叫蔬菜和花。和一個叫Tomato的子類,它擴展了Vegetable類,現在我的問題是我的Tomato類不能訪問它上面任何類的方法。因此,基本上我問,如果C擴展B,B擴展A,爲什麼C在語法上不能從我的程序中訪問A或B中的公共方法?一個子類調用它的超類的方法(這也是一個子類)

public class Tomato extends Vegetable{ 

private String breed; 

public Tomato(String o, int s, String b) 
{ 
    super(); 
    breed = b; 
} 

public String getBreed() 
{ 
    return breed; 
} 

public String toString() 
{ 
    return "[Owner: " + getOwner() + " , Sprouts: " + getSprouts() 
      + " , Breed: " + getBreed() + "]"; 
} 

public void water() 
{ 
    if(breed.toLowerCase().contains("porterhouse")) 
    { 
     int numSprouts = getSprouts(); 
     setSprouts(numSprouts*3); 
    } 
} } 

我在方法調用getOwner()和getSprouts()方面收到錯誤,只有訪問方法。 getOwner()是工廠類中的公共方法,getSprout()是Vegetable類中的方法,該類是層次結構中直接位於其上方的類。

+2

西紅柿實際上水果) – flakes

+0

@MartinS,真。 C不能直接使用'super'調用A的任何方法,但B可以將函數調用傳遞給A. – callyalater

+1

向我們展示一些代碼。 'C'應該能夠從'A'和'B'調用公共方法。 – Marvin

回答

-1

您可以創建類新之間的 「橋樑」:

class A { 
    public String getA() { 
     return "A"; 
    } 
} 

class B extends A { 

    @Override 
    public String getA(){ 
     return super.getA(); //uses getA from A class 
    } 
} 

class C extends B { 
    @Override 
    public String getA(){ 
     return super.getA(); //uses getA from B class 
    } 
} 

測試:

public static void main(String... args) { 

    A a = new C(); 
    System.out.println(a.getA()); 
} 

打印:一個

+0

呃...在這種情況下,不要在'B'或'C'中重寫'getA()'......這並不能解決任何問題。 – MartinS

0

你正在嘗試來形容是一個多層次的繼承。 Here就是它的一個例子。是的,只要子類是公共/受保護的,子類就可以訪問其父母的任何方法。

1

如果我理解正確的是:番茄可以訪問蔬菜植物的公共方法。

public class Plant { 
    public void getPlant(){ 
     System.out.println("In Plant"); 
    } 

    public static void main(String[] args) { 
     Tomato tomato = new Tomato(); 
     tomato.getTomato(); 

    } 
} 


class Vegetable extends Plant{ 
    public void getVegetable(){ 
     System.out.println("In Vegetable"); 
    } 

} 

class Flower extends Plant{ 
    public void getFlower(){ 
     System.out.println("In Flower"); 
     getPlant(); 
    } 
} 

class Tomato extends Vegetable{ 
    public void getTomato(){ 
     System.out.println("In Tomato"); 
     getVegetable(); 
     getPlant(); 

    } 
} 

輸出:

在番茄

在蔬菜

在植物

相關問題