0

我有一个疑问。想象一下,如果我们有一个实现该方法的类 A 例如

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

 }

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

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

以及在什么情况下会调用哪个方法!!

谢谢

4

4 回答 4

1

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

于 2013-10-08T23:12:52.243 回答
1

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

您的方法被声明为广告private,因此从扩展类中“不可见”。

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

于 2013-10-09T08:38:58.640 回答
0

试一试吧:)

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";
    }
}
于 2013-10-08T23:27:33.563 回答
-1

我认为您不会覆盖超类方法,为此,子类上的方法必须具有与超类方法相同的签名。

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

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

  • 假设test2是一个实例classBtest2.methodA(index)会执行子类的方法。

  • classB您可以调用超类方法(如果方法不是private),例如:

    public class ClassB extends ClassA
    {
        ...
        super.methodA(index);
        ...
    }
    
于 2013-10-08T23:31:37.923 回答