inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

입문자를 위한, HTML&CSS 웹 개발 입문

상속과 접근 제어: 부모 & 자식 클래스에서 서로 다른 값 설정시

69

슝슝

작성한 질문수 4

0

안녕하세요. 상속과 접근제어 파트를 듣고 있는데요,

만약에 부모 클래스인 Parent 클래스에서 public int publicValue = 2;라고 설정해놓고,

package extends1.access.parent;

public class Parent {

    public int publicValue = 2;
    protected int protectedValue;
    int defaultValue;
    private int privateValue;

자식 클래스인 Child 클래스에서 publicValue = 1;이라고 설정하면 충돌이 일어나지 않나요?

package extends1.access.child;

import extends1.access.parent.Parent; //자동으로 되네?

public class Child extends Parent { //부모 클래스의 어디까지 접근 가능한가?

    public void call() {
        publicValue = 1;
        protectedValue = 1; //상속 관계 or 같은 패키지
        //defaultValue = 1; //다른 패키지 접근 불가, 컴파일 오류
        //privateValue = 1; //접근 불가, 컴파일 오류

컴파일 했을 때 Child 클래스에서 설정한 publicValue = 1;로 결과가 나오는데, 왜 그러는 것일까요? Parent 클래스에서 초기화한 값과 Child 클래스에서 초기화한 값이 다르면 컴파일 오류가 날 것 같은데 왜 아닌가요?

 

HTML/CSS

답변 1

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다.
sy k님, 질문 감사합니다.

상속 관계에서 동일한 필드명을 사용하여 부모 클래스와 자식 클래스에서 다른 값을 설정하는 경우, 실제로는 부모 클래스의 필드가 아니라 자식 클래스의 필드가 사용됩니다. 자식 클래스에서 부모 클래스의 publicValue를 그대로 사용하지 않고, 자신의 publicValue를 설정하기 때문에 충돌은 발생하지 않습니다.

자식 클래스에서 publicValue를 따로 설정하면 자식 클래스의 publicValue가 부모의 publicValue를 “덮어씌우지” 않습니다. 대신 자식 클래스의 publicValue 필드가 상속되지 않은 새로운 변수로 사용됩니다. 즉, Child 클래스의 publicValue = 1;Child의 새로운 값을 설정하는 것이며, 부모 클래스의 publicValue와는 다른 메모리 위치에 저장됩니다.

결과적으로 컴파일 오류가 발생하지 않으며, Child 클래스에서 설정한 publicValue = 1;이 적용됩니다.

이를 해결하거나 명확하게 사용하려면, 자식 클래스에서는 부모 클래스와 다른 이름의 필드를 사용하는 것이 좋습니다. 또한, 코드의 가독성을 위해 이러한 차이를 명확하게 이해하는 것이 중요합니다.

추가적으로 자세한 부분은 Spring Data Repositories 문서에서 동일한 변수 사용시의 권장사항을 참고하는 것도 좋습니다.

도움이 되었기를 바랍니다!

강의자료

0

135

2

button 질문

0

48

2

html설명하실때 접속시는 e북 링크는 어디에 있나요

0

102

1

style 태그를 사용할 때

0

79

1

강의와 제 결과가 달라요

0

87

2

소스링크가 없습니다!

0

190

2

id 중복으로 해도 문제 없습니다

0

414

2

강의 자료

0

234

2

깃허브 링크 주소

0

339

2

제 vscode가 이상해요

0

277

1

화면 반영 안됨

0

226

1

고급 선택자 2탄에서 질문이 있습니다.

0

275

1

float속성

0

272

1

html{}

0

341

1

class와 id

0

276

1

제출하기 버튼

0

645

1

a 태그 이용해 이동

0

414

1

비디오태그

0

448

1

<html lang = "ko">

0

831

1

flexbox 부모 요소 이름

0

285

1

제출하기 버튼 코드 2가지 차이

0

432

1

최상위 태그 html 태그

0

427

1

저장시 줄바꿈

0

507

1

ctrl + 방향키

0

744

1