2013-04-11 2 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"를 출력합니다.

나는 이것이 끔찍한 디자인이며, 캡슐화를 완전히 없애지 만 자바에서는 가능하다고 생각 하는가?

+0

super.nameOfYourMethod() 같은 것이 있습니까? –

+1

캡슐화에 위배되지 않습니다. 여기를보세요 http://stackoverflow.com/questions/6386343/how-to-call-a-super-method-ie-tostring-from-outside-a-derived- class –

답변

1

아니요, 직접 할 수있는 방법이 없지만 b 내에서 f()를 호출하는 함수를 작성할 수 있습니다. super.f() 호출 f2() 당신이 액세스 할 수 없습니다

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

주의 사항은, 그러나, b에서 f()이다; 즉, b 내의 슈퍼 클래스 a를 호출합니다.

super은 수퍼 클래스 호출이며 외부에서 호출 할 수는 없지만 클래스를 내부적으로 호출 할 수 있도록 디자인 할 수 있습니다.

+0

그건 의미가 있습니다, 고마워요! –

0

java에서는이 작업을 수행 할 수 없습니다. C++에서이 작업을 수행 할 때 수행중인 작업을 알면 문제가되지 않습니다. Java는 실제로 리플렉션 API를 통해 private 메소드에 필드를 액세스 할 수있게합니다.

관련 문제