2011-12-21 4 views
0

안녕하세요 저는 약간 혼란 스럽습니다.캐스트 인스턴스/참조?

public class test{ 
    private B b;//remember: A is super class of B so 'public class B extends A' 

    public test(){ 
     b = new B(); 
    } 

    public A geta(){ 
     return (A)b; 
    } 
} 

:

내가 클래스 A를 가지고 있고이의 반환 타입을 가진 메소드가있는 경우 B. A가 B의 상위 클래스라고하자, 나는 반환 값으로 사용할 수 있습니다 그래서 'geta()'에 의해 반환 된 값은 'b'의 인스턴스에 대한 참조가 될 것입니다. 예를 들어, A가 변수 X를 갖고 B가 변수 Y를 가졌다면 다음과 같이 할 수 있습니다 :

test t = new test(); //t.b.X = 5 and t.b.y = 10 
A a = t.geta(); 
a.X = 20 /*This will change the value of X in the instance of B, b, of t... 
      in other words, t.b.X will also equal 20*/ 

언제든지 감사드립니다. 시간 내 주셔서 감사합니다.

+4

지금까지, 당신이 말한 모든 것이 올바른 것으로 나타나는 A.에게 단지 return b; 때문이다. ...하지만 문제는 무엇입니까? – BRFennPocock

+0

'B'가'A'의 서브 클래스라면'A'에 캐스트 할 필요가 없습니다. 'return b; '로 충분해야합니다. – Thomas

답변

5

게타 수 b는

+0

와우 정말 쉬어야 해. – AlexRamallo