2013-06-26 34 views
-5

這個Coffee類不會覆蓋Demo接口的方法。但它有一個擁有顯示方法的超類。我的問題是:這是如何工作的?這怎麼可能?看到下面的貼子讓我很困惑

public class Coffee extends Demo1 implements Demo { 

    public static void main(String args[]) 
    { 
     Coffee c=new Coffee(); 
     c.display(); 
     Demo d=c; 
     Demo1 d1=c; 
     d.display(); 
     d1.display(); 
    } 
} 


interface Demo 
{ 
    public void display(); 
} 

class Demo1 
{ 
    public void display() 
    { 
     System.out.println("this is method in demo1"); 
    } 

}  

輸出:

this is method in demo1 
this is method in demo1 
this is method in demo1 
+1

提示:您的問題可能會得到一些downvotes,因爲它沒有適當的格式,標記或標題。 –

+0

這是怎麼用一個div標籤? –

+0

這有什麼驚喜呢?還有什麼會打印出來的? – Patashu

回答

1

你的咖啡,對象是一個演示,對象以及一個demo1的對象時,因此Demo d=c;是一個有效的聲明,以及Demo1 d1=c;。在c之後,d和d1都包含對同一對象的引用,因此將輸出相同的字符串,因爲您從未定義過display()的任何其他功能。

除了你的代碼真的沒用,正確的做法更可能是讓Demo1實現Demo,然後Coffee只擴展Demo1。這樣就會更清楚地發生在這裏。

+0

謝謝你的回答。我剛剛啓動了SCJP並試圖清除我的概念。 – Ankit

+0

那麼也許不要從多態和接口開始,如果你不知道它們中的任何一個,那麼最多不要混合使用它們。嘗試一次學習一個,也許從多態/繼承/「擴展」開始,然後如果你理解了接口的話。如果你不知道你在那裏做了什麼,那麼解釋你的代碼會發生什麼是無用的。 – luk2302