我想知道是否可以在派生类之外显式访问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中是否可行?
答案 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()
访问b
,f2()
来电super.f()
;换句话说,从b。中调用超类a。
super
是超类调用,虽然无法从外部调用,但您可以设计类以便能够在内部调用它。
答案 1 :(得分:0)
你不能在java中这样做。当你在C ++中执行此操作时,你知道自己在做什么,所以这不是问题。 Java实际上允许通过反射API访问私有方法。