在课堂申报中混合抽象与公开/私人
问题描述:
给出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下编译它不应该支持它?
答
私有方法不能从超类继承。抽象方法必须重写并在派生类中实现。由于私有方法不能被继承,因此声明一个私有的抽象方法是没有意义的。要么使抽象的方法public
或protected
私人方法意味着它的私人定义的类。
您可以通过修改代码:
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();
}
}
应用程序不会从PRR延伸,使得在应用程序的显示方法无关,与PRR的show方法。另外请添加对您引用的文档的引用。 – Juan
你只需在应用程序中调用show()方法,而不用在prr中扩展prr或覆盖show()(因为它被声明为private,所以你不能做任何事情)。即使您在prr public中声明了show(),仍然无法在应用程序中覆盖,而不会扩展prr – smitty1
您的'prr'类不能在Eclipse Oxygen中编译 - “类型prr中的抽象方法显示只能设置可见性修饰符,其中一个公开或 \t受保护“ –