자바 클래스 형변환 질문 드립니다!
조회수 808회
자바를 다시 공부를 하고있는데, 궁금한것이 있어서 질문 올립니다.
public class super{
public int one= 11;
public int two= 22;
public void one_method() {
System.out.println("super one_method");
}
class sub extends super{
public int one = 1;
public int two = 2;
public int three = 3;
public void one_method() {
System.out.println("sub one_method");
}
public static void main(String[] args) {
super mSuper = new sub(); // (=) mSuper = (super)new sub();
System.out.println(mSuper.one);
}
을 했습니다. 슈퍼클래스 = (슈퍼클래스)서브클래스 로 형변환을 하였습니다.
여기서 궁금한점이 생겼습니다. mSuper.one_method(); 를 실행하면, sub클래스의 one_method()가 오버라이딩되어 사용이 됩니다.
하지만 변수는 뽑아보게되면, sub의 one변수(1)이 아닌 super의 one변수값(11)이 나오게됩니다.
클래스 형변환시, 메소드는 이름이 같으면 오버라이딩 되는데 변수는 왜 그렇게 되도록 허용하지 않는 건가요? 이유가 궁금합니다.
2 답변
-
질문자께서 객체지향에 대해 학습중인 듯 합니다.
오버라이딩이란 기능의 재정의를 말합니다.
예를들어 자동차라는 클래스가 있다면 속성은 색상, 무게등이 될 수 있고 기능은 시동, 멈춤 등이 될 수 있습니다. 즉 색상, 무게는 변수로 시동, 멈춤은 메소드로 정의할 수 있습니다.
여기서 승용차와 버스라는 클래스 디자인을 고민해보죠. 승용차와 버스 모두 자동차 이므로 자동차를 상속 받습니다. 그런데 승용차는 보통 가솔린에 자동임에 반해 버스는 디젤에 수동입니다. "시동" 이라는 기능이 서로 다르게 구현되어야 합니다.
이렇게 기능(메소드)이 달라져야 할 때 오버라이딩을 하게 됩니다.
속성은 보통 변수로 정의를 하게 되는데 속성 즉 색상, 무게 등은 모든 차에 공통 속성이고 승용차에 필요한 속성은 승용차에 추가를 하면 되는겁니다.
즉 속성은 오버라이딩이 아니라 추가가 됩니다.
-
오버 라이딩 설명을 해드릴게요 http://aroundck.tistory.com/2206 [돼지왕 왕돼지 놀이터]
여기서 보시면 오버라이딩은 메소드 기준으로 하는 겁니다.
즉 int one, two는 오버라이딩 된 메소드가 아니라
자신이 가지고 있는 기본 데이터 타입인 11과 22 를 반환 합니다.
여기서 만약 ::: System.out.println(mSuper.three);
을 한다면 슈퍼가 three라는 파라미터가 없어서 출력이 안됩니다.
오버라이딩은 메소드 기준으로 하는겁니다.
댓글 입력