자바의 super 메소드 호출

mr.lee의 이미지

C++ 에서는 몇단계 위의 override된 super 메소드라도 골라서 부를 수 있죠. 안에서든, 밖에서든.. 이를테면

class T1
{
public:
  virtual void prn() { cout << "T1" << endl; }
};
 
class T2 : public T1
{
public:
  virtual void prn() { cout << "T2" << endl; }
};
 
class T3 : public T2
{
public:
  virtual void prn() { cout << "T3" << endl; }
};

이런 클래스 구조가 있다고 할때

T3 t3;
t3.prn()
t3.T2::prn();
t3.T1::prn();

이렇게 각각을 부를 수 있잖습니까? 혹은 T3의 prn()에서 다음과 같이 할 수도 있겠죠.

T2::prn();
T1::prn();

헌데 자바에서는 다중으로 override되어 있을때 super.method() 를 하면 상위의 최종 메소드 (몇단계로 override가 중첩이 되었던지) 만 불리워지는것으로 압니다.

자바에서도 원하는대로 상위의 메소드를 골라 부를 수 있는 방법이 있는지요?
또한, 외부에서 직접 그 객체의 상위 메소드를 부를 수 있는 방법이 있는지요?
만약 그럴 수 없다면 어떤 철학때문에 그렇게 설계가 되었는지요.

추가로..

Class1$Class2 obj = Class1.getObject(); 

뭐 대략 상기와 같이 객체를 얻어오는 라이버러리가 있습니다. 헌데 저기서 $ 가 어떤 의미인지요?
제가 생각기엔 inner class 같은데.. 테스트 코드를 inner class로 만들어 저런식으로 해보았는데 에러가 나더라구요.