0

我想知道是否可以在派生类之外显式访问 Java 中的超类方法。以下 C++ 代码说明了这一点:

#include <iostream>
using namespace std;

class A {
  public:
    virtual void f( ) {
      cout << "A\n";
    }
};

class B : public A {
  public:
    void f( ) {
      cout << "B\n";
    }
};

int main( ) {
  B b;
  b.A::f( );
  return 0;
}

此代码输出“A”,因为它显式调用了 f 的 A 版本。

我知道这是可怕的设计,并且完全破坏了封装,但这在 Java 中可能吗?

4

2 回答 2

1

不,没有办法直接做到这一点,但是,您可以在 b 中编写一个函数来调用 a 的 f()。

class a {
    public void f() {
        System.out.println("hi");
    }
}

class b extends a {
    public void f() {
        System.out.println("hi2");
    }

    public void f2() {
        super.f();
    }
}

请注意,您不能f()从访问 a b,但是,f2()调用super.f(); 换句话说,从 b 中调用超类 a。

super是超类调用,虽然它不能从外部调用,但您可以将类设计为能够在内部调用它。

于 2013-04-11T23:57:44.350 回答
0

你不能在java中做到这一点。当您在 C++ 中执行此操作时,您知道自己在做什么,所以这不是问题。Java 实际上允许通过反射 API 访问私有方法和字段。

于 2013-04-12T00:09:05.743 回答