Java 如果子类扩展基类异常
我有点怀疑。 想象一下,如果我们有一个实现该方法的类a 比如说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 { } 在哪种情况下调用哪种方法 谢谢如果您的方法没有声明为“私有”,这将只是标准的多态性。因为它们是私人的,所以规则有
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); ... }
methodA
方法,但请注意,您没有覆盖它
您的方法声明为adprivate
,因此在扩展类中不“可见”
如果您的目的是使方法可重写,则需要将其声明为
public
如果不指定可丢弃的
,则不能使用抛出
。这是一个编译时错误。我删除了我先前的答案,在注意到这些方法被声明为私有之前,我写了这个答案。向投票人道歉。最后一部分是错误的。您不能调用超类方法,因为它是私有的。所有这些都不正确。私有方法不是这样工作的。正如我在回答中所说,重要的是调用代码是用哪个类编写的。不是调用该方法的对象的类。这里没有多态性。你回答问题了吗?在我看来,你刚刚重申了这一点,并将“私人”改为“公共”。
public class ClassB extends ClassA
{
...
super.methodA(index);
...
}