2012-01-15 2 views
1

변수 A과 getter 메소드 getVar()이 있습니다. A를 확장하고 var를 bool var = false으로 재정의하는 클래스 B를 만들려고합니다. 코드 :Java (초보자)의 변수 상속

B b_class = new B(); 
System.out.println(b_class.getVar()); 

내가 true을 얻고 난 이유를 알아 보았하지 않습니다

public class A{ 
    protected boolean var = true; 
    public boolean getVar(){ 
     return var; 
    } 
} 

public class B extends A{ 
    protected boolean var = false; 
} 

문제는 내가 실행하면 때문이다. 내가 뭘 잘못하고있어?

+0

정적 메서드가 아니기 때문에'B.getVar()'을 사용할 수 없습니다. 나는 당신이'b_class.getVar()'를 사용한다고 가정하고 그것을 고쳤다. – kba

+0

물론입니다! 고맙습니다. – Manuel

답변

2

가 슈퍼 클래스 (A) 볼 수 없기 때문에 당신은, 당신의 오버라이드 (override) 클래스의 새 인스턴스 변수를 생성해서는 안되며 getVar()를 호출 할 때 따라서 것 볼 수있는 값을 반환하십시오. 대신 생성자에서 var 값을 원하는 값으로 설정해야합니다.

public B() { 
    var = false; 
} 
+0

그게 제가 원했던 설명입니다, 대단히 감사합니다! – Manuel

7

"상속"하지 마십시오. B.varA.var을 숨기지 만 B에만 나타납니다. A에있는 getVar()이라는 메서드는 A.vartrue입니다.

3

A.var이 숨겨져있는 필드가 B에 있다고 선언합니다. 대신이 시도 :

public class B extends A { 
    public B() { 
     var = false; 
    } 
} 
+0

매력처럼 작동합니다. 감사합니다! – Manuel

0

GetVar은 B에 정의되지 않았으므로 다형성은 var가 true 인 곳으로 점프합니다.

1

슈퍼 클래스에서 초기화 된 변수는 이와 같이 변경할 수 없습니다. 이미 보호 된 부울 var = true를 선언했습니다. 따라서, 확장 수업에서 무엇을 하든지 항상 진실을 보여줄 것입니다.