2016-01-25 121 views
-1
public abstract class demo { 
demo() 
{ 

} 
public void display(){System.out.println("this is from abstract class");} 
public static void main(String[] args) { 
    // TODO Auto-generated method stub 

    demo s=new demo(){ 
     public void display(){System.out.println("this is demo constructor");} 
    }; 
    s.display(); 

} 

} 

在上面的代碼中,我試圖創建一個匿名類來擴展演示類和重寫顯示功能,但我得到一些錯誤。上面的代碼給我一個錯誤表示「類型演示已經定義」。我不明白爲什麼會出現這個錯誤。無法理解代碼中的錯誤

+1

很可能你的項目中有另一個文件包含一個具有相同名稱的類。 – yole

+0

要添加到@yole提到的內容:它在Java 8u65(oracle) – Augusto

回答

0

你的代碼工作正常。我想問題是你已經有一個demo類定義在同一個包中的某個地方(這裏是我猜測的默認值,這不是一個好的做法)。

此外,Java遵循一些約定。例如,類名應該以大寫字母開頭。這裏是你的代碼的正確版本:

public abstract class Demo{ 

    public Demo(){} 


    public void display(){ 
     System.out.println("this is from abstract class"); 
    } 


    public static void main(String[] args){ 
     Demo s = new Demo(){ 
      public void display(){ 
       System.out.println("this is demo constructor"); 
      } 
     }; 
     s.display(); 
    } 
} 

順便說一句,這裏的abstract關鍵字是沒有必要的。普通班會有同樣的效果。 abstract只是防止任何人實例化一個對象Demo ...

+0

上正常工作,創建的匿名對象由基類Demo引用。有可能我可以通過匿名變量引用嗎?它的類型是什麼? – user5533204

0

這是一個名稱衝突;兩個具有相同名稱的類在同一個包中。我建議(之前的任何進口)增加一個包名稱以去除你的文件的開頭的名稱衝突是這樣的:

package com.test.demo