java中的继承行为
有人能解释一下,为什么eclipse中会显示错误,但运行成功却没有任何错误 父类:java中的继承行为,java,oop,inheritance,Java,Oop,Inheritance,有人能解释一下,为什么eclipse中会显示错误,但运行成功却没有任何错误 父类: public class Parent { /*Parent class method*/ public void show() { System.out.println("Parent class show called"); } } 儿童班: public class Child extends Parent { /* Child class overrid
public class Parent {
/*Parent class method*/
public void show() {
System.out.println("Parent class show called");
}
}
儿童班:
public class Child extends Parent {
/* Child class overridden method*/
private void show() {
// this line show error in eclipse
System.out.println("Child class show called ");
}
public static void main(String[] args) {
Parent p = new Child();
p.show();
}
}
输出是:父类show调用您不能通过继承降低方法的可见性 因此,子类中的可见性必须是
public
而不是private
public class Child extends Parent{
/* Child class overridden method*/
public void show(){ // this line show error in eclipse
System.out.println("Child class show called ");
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Parent p = new Child();
p.show();
}
}
不能降低java中方法的可见性。 子类中的
show()
方法必须是public
。
然后错误就会消失,您应该让您的输出
子类显示名为
,这是因为即使存在编译错误,eclipse编译器也可以创建类文件。请点击下面的链接
但若您将在java反编译器中打开由它创建的子类,那个么您将看到下面的代码
public class Child extends Parent
{
private void show()
{
throw new Error("Unresolved compilation problem: Cannot reduce the visibility of the inherited method from Parent");
}
public static void main(String[] args)
{
Parent p = new Child();
p.show();
}
}
所以基本上eclipse所做的就是忽略这个错误并用这个错误创建一个类文件,当类文件存在时,您就可以运行代码,因为在编译时它能够发现父级有方法show,所以它正在调用那个方法。
但若您将引用从父类更改为子类,那个么它将在运行时给您异常
线程“main”java.lang中出现异常。错误:未解决的编译问题:
无法降低从父级继承的方法的可见性
位于com.nucleus.finnone.tbs.Child.show(Child.java:5)
在com.nucleus.finnone.tbs.Child.main(Child.java:12)中,您必须提到您遇到的错误是什么?您的开发环境之外的人是如何知道的?您不能更改重写方法的可见性。若eclipse显示错误,它如何运行?顺便说一句,你不能降低继承方法的可见性。Tom,你是对的,它显示了错误,但运行成功。你可以试试。我没有使用旧的编译代码。我知道这一点,但它为什么会成功运行。@Santossingh你可能在eclipse中添加错误之前运行旧的编译代码。项目-->清洁。再次尝试运行它,它将不会运行。请您也可以在eclipse中尝试@桑托辛:你说得对。代码正在运行。看起来java编译器忽略了子类中的方法
show
。真的很奇怪。是的,我知道根据java标准,我不能降低可见性。但是我仍然成功地减少了代码的运行。