2013-04-11 71 views
0

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

#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

东西像super.nameOfYourMethod()? –

+1

你不能违反封装 看看这里http://stackoverflow.com/questions/6386343/how-to-call-a-super-method-ie-tostring-from-outside-a-derived- –

回答

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(); 
    } 
} 

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

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

+0

这很有道理,谢谢! –

0

你不能在java中这样做。当你用C++做这件事时,你知道你在做什么,所以这不是问题。 Java实际上允许通过反射API访问私有方法的字段。