2014-12-05 37 views
1

我有一個名爲「Design」的類,我正在編寫下面的代碼來擴展該類以包含一個名爲sayHello()的新函數。但它似乎沒有工作。我只允許以這種方式來超越現有的功能嗎?在java子類中嵌入的新函數聲明

Design design1 = new Design() { 
    public void sayHello() { 
     System.out.println("hello"); 
    } 
}; 

design1.sayHello(); // this gives an error "function not found" 
+1

實際類型的變量的具有'sayHello'方法;但是它是一個匿名類型,而你的變量是'Design'類型,它沒有這個方法。如果你想調用新的方法,你需要在實例化之前正式聲明類型。 – vanza 2014-12-05 05:35:18

回答

0

所以這是合乎邏輯的。 您正在重寫一個超類並將其分配給超類的實例變量。

由於實例變量是超類類型,所以只能訪問超類中可用的那些方法。

0

如果您的「設計」類是接口,則可以這樣做。你可以創建一個匿名的內部類。

實施例:

public interface Design{ 
    public void sayHello(); 
} 

public class Test 
{ 
    public static void main(String args[]) 
    { 
      Design d = new Design(){ 
       @Override 
       public void sayHello(){ 
         return "Hello World!"; 
       } 
      }; 
      System.out.println(d.sayHello());  
    } 
}