자바 클래스 형변환 질문 드립니다!

조회수 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 답변

  • 좋아요

    2

    싫어요
    채택 취소하기

    질문자께서 객체지향에 대해 학습중인 듯 합니다.

    오버라이딩이란 기능의 재정의를 말합니다.

    예를들어 자동차라는 클래스가 있다면 속성은 색상, 무게등이 될 수 있고 기능은 시동, 멈춤 등이 될 수 있습니다. 즉 색상, 무게는 변수로 시동, 멈춤은 메소드로 정의할 수 있습니다.

    여기서 승용차와 버스라는 클래스 디자인을 고민해보죠. 승용차와 버스 모두 자동차 이므로 자동차를 상속 받습니다. 그런데 승용차는 보통 가솔린에 자동임에 반해 버스는 디젤에 수동입니다. "시동" 이라는 기능이 서로 다르게 구현되어야 합니다.

    이렇게 기능(메소드)이 달라져야 할 때 오버라이딩을 하게 됩니다.

    속성은 보통 변수로 정의를 하게 되는데 속성 즉 색상, 무게 등은 모든 차에 공통 속성이고 승용차에 필요한 속성은 승용차에 추가를 하면 되는겁니다.

    즉 속성은 오버라이딩이 아니라 추가가 됩니다.

    • 댓글 감사합니다 :) 디버깅을 통해 확인해본결과 말씀대로 이름이 같은 변수라도 객체에 포함돼 있는것을 확인했습니다. 심승현 2018.8.9 15:14
  • 오버 라이딩 설명을 해드릴게요 http://aroundck.tistory.com/2206 [돼지왕 왕돼지 놀이터]

    여기서 보시면 오버라이딩은 메소드 기준으로 하는 겁니다.

    즉 int one, two는 오버라이딩 된 메소드가 아니라

    자신이 가지고 있는 기본 데이터 타입인 11과 22 를 반환 합니다.

    여기서 만약 ::: System.out.println(mSuper.three);

    을 한다면 슈퍼가 three라는 파라미터가 없어서 출력이 안됩니다.

    오버라이딩은 메소드 기준으로 하는겁니다.

    • 답변 감사드립니다 :) 오버라이딩이 메소드 기준인건 알고있습니다. 하지만 왜 변수는 오버라이딩 기능을 지원안하는지 이유를 알고싶네요. 심승현 2018.8.8 21:41
    • 메소드만 하는게 오버라이드 이고, 기본 데이터 타입은 안됩니다. 그리고 sub가 가진 int one, two는 인스턴스 변수이므로 저게 실행시 인스턴스가 없습니다. 이도근 2018.8.8 21:52

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)