inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

나도코딩의 자바 기본편 - 풀코스 (20시간)

Final

선생님 Final에서 2분 17초 질문 있습니다.

해결된 질문

331

온리유빵재료

작성한 질문수 10

2

 public void makeVideo(){

}

에서 this.name 이라구 하는데

 

Camera 클래스에서의 name과 연결되는건가요?

메소드 오버라이딩인지 궁금합니다! showMainFeature()와는 다른건지 질문남깁니다.

java 객체지향

답변 1

1

나도코딩

안녕하세요?
네, 맞습니다. 상속 관계에 의해 자식클래스인 ActionCam 은 부모 클래스인 Camera 의 모든 내용을 포함하게 됩니다. 그래서 ActionCam 에서 별다른 name 변수를 생성하지 않고 this 를 통해 접근하게 되면 부모 클래스인 Camera 에 정의된 name 변수를 의미하게 됩니다.

이해를 돕기 위해 제가 코드를 조금 간단히 바꿔봤어요. Camera 클래스에서는 name 변수에 바로 카메라 라는 값을 넣었습니다. 그리고 ActionCam 에서는 this 를 통해서 name 변수의 값을 출력하는데요.

public class Camera {
    public String name = "카메라";
}
public class ActionCam extends Camera {
    public void makeVideo() {
        System.out.println(this.name);
    }
}
public class Sample {
    public static void main(String[] args) {
        ActionCam aCam = new ActionCam();
        aCam.makeVideo();
    }
}

위와 같이 코드를 작성하고 실행해보면 결과는 이렇습니다.

카메라

즉 부모클래스인 Camera 의 name 변수값이 찍히는 것이죠.

그런데 ActionCam 에도 똑같은 이름의 name 변수를 만들면 어떻게 될까요? 이렇게 바꿔보겠습니다.

public class ActionCam extends Camera {
    public String name = "액션 카메라"; // 변수 생성
    public void makeVideo() {
        System.out.println(this.name);
    }
}

그런 다음에 똑같이 코드를 실행해보면 이번에는 액션 카메라 가 출력되는 것을 알 수 있습니다.

액션 카메라

ActionCam 에 name 변수가 없을 때는 부모클래스의 name 변수값을 출력했지만, ActionCam 에 name 변수가 생기니 이번에는 ActionCam 의 name 변수값을 출력하게 되네요. 그러면 부모클래스의 name 변수는 더 이상 쓸 수 없는 것일까요?

public class ActionCam extends Camera {
    public String name = "액션 카메라";
    public void makeVideo() {
        System.out.println(super.name); // this 를 super 로 변경
    }
}

그렇지 않습니다. 출력문에서 this 대신 super 로 바꾸면 name 변수가 있음에도 불구하고 부모클래스의 name 변수값인 카메라 가 출력됩니다.

카메라

부모클래스에만 있는 변수에 접근하기 위해 this 를 사용했을 때,
부모클래스와 자식클래스에 동일한 이름의 변수가 있고 this 를 사용했을 때,
부모클래스와 자식클래스에 동일한 이름의 변수가 있고 super 를 사용했을 때,
각각의 경우에 대해서 어떤 차이가 있는지 잘 알아두시면 좋겠습니다 😊

감사합니다.

0

온리유빵재료

선생님 ㅠㅠ 감사합니다!

자바를 처음 배울 때 이런 고민이 드는 게 정상일까요?

1

146

2

static이 뭐였는지 기억이 안나요 ㅜㅜ

0

119

2

Iterator (알 수 없음) 데이터 삭제 후 초기화 관련 문의

0

72

1

사고력 키우는 법이 어떤게 있나요?

0

94

2

getter setter

0

103

2

섹션9. 66 메소드 오버로딩 시 질문이 있습니다.

0

80

1

안녕하세요 갑자기 프로그램 에러가 떠서 안되네요

0

76

2

변수 이름짓는법

0

114

2

intelli J 실행오류

0

115

2

혹시 이건 수학적 사고가 부족한 걸까요?

0

152

2

영상이 재생이 안됩니다.

0

167

3

이중 반복문 (후반전) 오른쪽으로 치우친 별 쌓기에 질문이 있습니다.

0

117

2

응용이 어렵습니다.

0

206

2

IntelliJ가 보이지 않습니다.

0

187

3

JDK 버전 문의

0

130

2

BlackBox 파일 내에서 메소드 정의

0

136

1

동기화

0

122

2

Iterator 문의

0

105

1

코드 순서 문의

0

143

1

클래스 메소드

0

150

2

Quiz_05 관련 질문드립니다 !

0

118

2

다운로드가 안됩니다

0

165

2

다형성

0

120

2

HashMap

0

80

2