2013-04-11 3 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», потому что он явно вызывает A-версию f.

Я знаю, что это ужасный дизайн и полностью разрушает инкапсуляцию, но возможно ли это на Java?

+0

что-то вроде super.nameOfYourMethod()? –

+1

вы не можете это нарушает инкапсуляцию посмотрите здесь http://stackoverflow.com/questions/6386343/how-to-call-a-super-method-ie-tostring-from-outside-a-derived- класс –

ответ

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(); другими словами, вызов суперкласса a изнутри b.

super - вызов суперкласса, и, хотя он не может быть вызван извне, вы можете создать класс таким образом, чтобы иметь возможность называть его внутренне.

+0

Это имеет смысл, спасибо! –

0

Вы не можете сделать это в java. Когда вы делаете это на C++, вы знаете, что делаете, поэтому это не проблема. Java фактически разрешает доступ к закрытым методам полей через API отражений.

Смежные вопросы