我有一个疑问。想象一下,如果我们有一个实现该方法的类 A 例如
private void methodA(int index) throws Exception, Error {
}
如果我们有一个扩展第一个 A 类的 B 类。我的问题是,B 类可以实现吗
private void methodA(int index) throws Exception, Error {
}
以及在什么情况下会调用哪个方法!!
谢谢
我有一个疑问。想象一下,如果我们有一个实现该方法的类 A 例如
private void methodA(int index) throws Exception, Error {
}
如果我们有一个扩展第一个 A 类的 B 类。我的问题是,B 类可以实现吗
private void methodA(int index) throws Exception, Error {
}
以及在什么情况下会调用哪个方法!!
谢谢
如果您的方法没有被声明为“私有”,那么这只是标准的多态性。因为它们是私有的,所以规则有点不同。A 类中的版本只能从 A 类中的代码中调用。B 类中的版本只能从 B 类中实际编写的代码中调用(与 B 类通过扩展 A 类获得的代码相反)。
是的,您可以在 B 类中实现该methodA
方法,但是请注意,您并没有覆盖它。
您的方法被声明为广告private
,因此从扩展类中“不可见”。
如果您的意图是使您的方法可重写,则需要将其声明为public
.
试一试吧:)
public class Main {
public static void main(String[] args) {
Base base;
base = new A();
System.out.println(base.doSth());
base = new B();
System.out.println(base.doSth());
}
}
abstract class Base {
public abstract String doSth();
}
class A extends Base {
@Override
public String doSth() {
return "A";
}
}
class B extends A {
@Override
public String doSth() {
return "B";
}
}
我认为您不会覆盖超类方法,为此,子类上的方法必须具有与超类方法相同的签名。
您可以通过以下方式调用这些方法:
假设test1
是 的一个实例classA
,teste1.methodA(index)
将在超类上执行实现。
假设test2
是一个实例classB
,test2.methodA(index)
会执行子类的方法。
在classB
您可以调用超类方法(如果方法不是private
),例如:
public class ClassB extends ClassA
{
...
super.methodA(index);
...
}