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_Exception_Inheritance - Fatal编程技术网

Java 如果子类扩展基类异常

Java 如果子类扩展基类异常,java,oop,exception,inheritance,Java,Oop,Exception,Inheritance,我有点怀疑。 想象一下,如果我们有一个实现该方法的类a 比如说 private void methodA(int index) throws Exception, Error { } 如果我们有一个B类,它扩展了第一个a类。 我的问题是,B类可以实现吗 private void methodA(int index) throws Exception, Error { } 在哪种情况下调用哪种方法 谢谢如果您的方法没有声明为“私有”,这将只是标准的多态性。因为它们是私人的,所以规则有

我有点怀疑。 想象一下,如果我们有一个实现该方法的类a 比如说

 private void methodA(int index) throws Exception, Error {

 }
如果我们有一个B类,它扩展了第一个a类。 我的问题是,B类可以实现吗

 private void methodA(int index) throws Exception, Error {
 }
在哪种情况下调用哪种方法


谢谢

如果您的方法没有声明为“私有”,这将只是标准的多态性。因为它们是私人的,所以规则有点不同。类A中的版本只能从类A中的代码调用。类B中的版本只能从实际在类B中编写的代码调用(与类B通过扩展类A获得的代码相反)。

试试看:)


我认为您不会重写超类方法,要做到这一点,子类上的方法必须具有与超类方法相同的签名

您可以通过以下方式调用这些方法:

  • 假设
    test1
    classA
    的一个实例,
    test1.methodA(index)
    将在超类上执行实现

  • 假设
    test2
    classB
    的一个实例,
    test2.methodA(index)
    将执行子类方法

  • classB
    中,可以调用超级类方法(如果该方法不是
    private
    ),类似于:

    public class ClassB extends ClassA
    {
        ...
        super.methodA(index);
        ...
    }
    

,您可以实现类B中的
methodA
方法,但请注意,您没有覆盖它

您的方法声明为ad
private
,因此在扩展类中不“可见”


如果您的目的是使方法可重写,则需要将其声明为
public

如果不指定
可丢弃的
,则不能使用
抛出
。这是一个编译时错误。我删除了我先前的答案,在注意到这些方法被声明为私有之前,我写了这个答案。向投票人道歉。最后一部分是错误的。您不能调用超类方法,因为它是私有的。所有这些都不正确。私有方法不是这样工作的。正如我在回答中所说,重要的是调用代码是用哪个类编写的。不是调用该方法的对象的类。这里没有多态性。你回答问题了吗?在我看来,你刚刚重申了这一点,并将“私人”改为“公共”。
public class ClassB extends ClassA
{
    ...
    super.methodA(index);
    ...
}