在Java中从外部访问超类

时间:2013-04-11 23:54:36

标签: java oop

我想知道是否可以在派生类之外显式访问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中是否可行?

2 个答案:

答案 0 :(得分:1)

不,没有办法直接这样做,但是,你可以在b中写一个函数来调用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()访问bf2()来电super.f();换句话说,从b。中调用超类a。

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

答案 1 :(得分:0)

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