Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java中的继承行为_Java_Oop_Inheritance - Fatal编程技术网

java中的继承行为

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

有人能解释一下,为什么eclipse中会显示错误,但运行成功却没有任何错误

父类:

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标准,我不能降低可见性。但是我仍然成功地减少了代码的运行。