2013-04-11 75 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訪問私有方法的字段。