2016-04-23 73 views
0

我想了解繼承,並且遇到了這個問題。爲什麼下面的代碼給出錯誤?

下面是代碼:

import java.util.*; 
class Parent 
{ 
    void show() 
    { 
     System.out.println("show from parent"); 
    } 
} 
class Child extends Parent 
{ 
    public static void main(String s[]) 
    { 
     Parent p=new Child(); 
     p.show(); 
     p.display(); 
    } 
    void show() 
    { 
     System.out.println("show from child"); 
    } 
    void display() 
    { 
     System.out.println("display from child"); 
    } 
} 

和錯誤是:

G:\javap>javac Child.java 
Child.java:15: error: cannot find symbol 
       p.display(); 
       ^
    symbol: method display() 
    location: variable p of type Parent 
1 error 

如果我能夠訪問show()那麼爲什麼我不能夠訪問display()知道display()繼承並且還存在於類別定義Child class.

+0

'display()'在父類中不存在... – Li357

+0

請參閱'p'的基類型。 – Satya

回答

7

你必須瞭解運行時間類型編譯時間類型

在運行時,變量p保存對Child實例的引用。因此調用show方法將運行Child#show中的代碼,因爲這會覆蓋方法Parent#show

在編譯時,編譯器只能知道聲明的類型的變量。這是Parent。因此,編譯器只能訪問Parent類型的字段和方法,但不能訪問Child類型的字段和方法。

display方法根本沒有在Parent中聲明,因此是錯誤的。

0

Display()方法不在父類中。 t是錯誤的。你是訪問父類的顯示方法不是子類。如果你正試圖訪問父類中的方法,你不需要子類中的方法

1

如果你想調用客戶端的顯示方法,那麼你必須創建子類的對象。 例如。 小孩=新小孩();

否則你需要在父類中編寫顯示方法。

規則是父類不能調用子成員的引用。

相關問題