Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.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 继承为什么可以';我在子类中声明一个私有方法,并在super中使用相同的方法签名吗?_Java_Inheritance - Fatal编程技术网

Java 继承为什么可以';我在子类中声明一个私有方法,并在super中使用相同的方法签名吗?

Java 继承为什么可以';我在子类中声明一个私有方法,并在super中使用相同的方法签名吗?,java,inheritance,Java,Inheritance,我的书没有给出最好的解释,我想理解为什么在超类中有相同的方法签名时,子类中不能有私有方法。除非超类中的方法是公共的 我试着用谷歌搜索这个答案,我所能找到的就是关于重写私有方法的东西。但是,我试图用私有方法覆盖公共方法。如果可以,那怎么办?您已经用私有方法重写了一个公共方法,这将使超类方法不可见。指望该方法可用的代码将崩溃。OO(称为)的思想之一是,程序应该能够在高级别上操作对象,而不必知道所使用的确切实现类;任何子类的对象都应该可以替换其超类的对象。能够使超类方法无效会破坏这一点。如果可以,那又

我的书没有给出最好的解释,我想理解为什么在超类中有相同的方法签名时,子类中不能有私有方法。除非超类中的方法是公共的


我试着用谷歌搜索这个答案,我所能找到的就是关于重写私有方法的东西。但是,我试图用私有方法覆盖公共方法。

如果可以,那怎么办?您已经用私有方法重写了一个公共方法,这将使超类方法不可见。指望该方法可用的代码将崩溃。OO(称为)的思想之一是,程序应该能够在高级别上操作对象,而不必知道所使用的确切实现类;任何子类的对象都应该可以替换其超类的对象。能够使超类方法无效会破坏这一点。

如果可以,那又怎样?您已经用私有方法重写了一个公共方法,这将使超类方法不可见。指望该方法可用的代码将崩溃。OO(称为)的思想之一是,程序应该能够在高级别上操作对象,而不必知道所使用的确切实现类;任何子类的对象都应该可以替换其超类的对象。能够使超类方法无效将破坏这一点。

通过使派生方法
私有
,您将更改超类所订立的契约,阻止任何其他子类访问最初的
公共
方法


传递类型为超类的参数的函数将事先不知道是否允许调用该方法。这将是不好的。

通过使派生方法
私有
您将更改超类所做的约定,从而阻止任何其他子类访问最初的
公共
方法

传递类型为超类的参数的函数将事先不知道是否允许调用该方法。这将是不好的。

根据第8.4.8.3节,在重写时不能削弱方法的访问权限,特别是:

重写或隐藏方法的访问修饰符(§6.6)必须 提供至少与重写或隐藏方法相同的访问权限,如 如下:

如果重写或隐藏的方法是公共的,则重写或隐藏的方法 隐藏方法必须是公共的;否则,将发生编译时错误

如果重写或隐藏的方法受到保护,则重写 或隐藏方法必须受到保护或公开;否则,一个 发生编译时错误

如果重写或隐藏的方法具有默认(包)访问权限,则 重写或隐藏方法不能是私有的;否则,一个 发生编译时错误

如果你有一个超类引用子类对象,那么你仍然可以调用这个方法,不管它是什么类——超类,或者任何子类——例如

它必须仍然是
公共的

根据第8.4.8.3节的规定,在重写时不能削弱方法的访问权限,特别是:

重写或隐藏方法的访问修饰符(§6.6)必须 提供至少与重写或隐藏方法相同的访问权限,如 如下:

如果重写或隐藏的方法是公共的,则重写或隐藏的方法 隐藏方法必须是公共的;否则,将发生编译时错误

如果重写或隐藏的方法受到保护,则重写 或隐藏方法必须受到保护或公开;否则,一个 发生编译时错误

如果重写或隐藏的方法具有默认(包)访问权限,则 重写或隐藏方法不能是私有的;否则,一个 发生编译时错误

如果你有一个超类引用子类对象,那么你仍然可以调用这个方法,不管它是什么类——超类,或者任何子类——例如


它必须仍然是
公共的

回答为谢谢!^^^Nate和BacMan都回答了谢谢你内特和巴克曼。
Superclass obj = new Subclass();
obj.method();