在课堂申报中混合抽象与公开/私人

问题描述:

给出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受保护“ –

私有方法不能从超类继承。抽象方法必须重写并在派生类中实现。由于私有方法不能被继承,因此声明一个私有的抽象方法是没有意义的。要么使抽象的方法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(); 
    } 
}