2017-10-28 83 views
0

給出prr課程與public abstract prr()。 根據官方的Java文檔應該不可能寫在一起的抽象&私人關鍵字,但它在Eclipse編譯在課堂申報中混合抽象與公開/私人

abstract class prr { 
/* we have an abstract class as prr. There is a method as show.*/ 
abstract private void show(); 
} 
// Since show() is abstract, this is redefined in App class. 
// Ideally show() should not even be seen in App because it is private. 
public class App 
{ 
private void show(){ 
    System.out.println("Inside prr");} 

public static void main(String args[]) { 
    App m = new App(); 
    m.show();}} 

輸出是:

內PRR

如何根據文檔,它可能在eclipse下編譯它不應該支持它?

+1

應用程序不會從PRR延伸,使得在應用程序的顯示方法無關,與PRR的show方法。另外請添加對您引用的文檔的引用。 – Juan

+0

你只需在應用程序中調用show()方法,而不用在prr中擴展prr或覆蓋show()(因爲它被聲明爲private,所以你不能做任何事情)。即使您在prr public中聲明瞭show(),仍然無法在應用程序中覆蓋,而不會擴展prr – smitty1

+0

您的'prr'類不能在Eclipse Oxygen中編譯 - 「類型prr中的抽象方法顯示只能設置可見性修飾符,其中一個公開或 \t受保護「 –

回答

0

私有方法不能從超類繼承。抽象方法必須重寫並在派生類中實現。由於私有方法不能被繼承,因此聲明一個私有的抽象方法是沒有意義的。要麼使抽象的方法publicprotected

私人方法意味着它的私人定義的類。

您可以通過修改代碼:

abstract class Prr { 
    protected abstract void show(); 
} 

public class App extends Prr { 
    @Override 
    void show() { 
     System.out.println("Inside prr"); 
    } 

    public static void main(String args[]) { 
     App m = new App(); 
     m.show(); 
    } 
}