인프런 커뮤니티 질문&답변

주서님의 프로필 이미지

작성한 질문수

(2024) 일주일만에 합격하는 정보처리기사 실기

Java에서 this와 super 키워드

생성자 생성시 질문있어요

해결된 질문

24.09.04 11:44 작성

·

87

·

수정됨

0

5분37초 영상입니다.

 

해당 main함수에서 Child c = new Child()를 생성시엔

부모 클래스의 메서드를 부르지 않나요?

 

Child() 생성자가 없기때문에 무시한 것인지 알고싶어요

답변 3

0

주서님의 프로필 이미지
주서
질문자

2024. 09. 04. 12:17

음... 그냥 해당 내용 전체인데요 여기에 child()만 추가한 소스입니다

class Parent{

int x = 10;

}

class Child extens Parent {

int x = 20;

child()

void display(){

system.out.println("Child x: " +x);

system.out.println("Parent x: " + super.x);

}

}

public class Main {

public static void main(String[] args) {

Child c = new Child()

c.display();

}

}

해당 코드 사용시 child()생성자에 의해서 부모 클래스를 불러와서 int x=10을 덮어쓰는가에 대한 질문입니다!

주말코딩님의 프로필 이미지
주말코딩
지식공유자

2024. 09. 04. 12:46

아뇨, 저렇게 하면 여전히 아래처럼 나옵니다.

Child x: 20
Parent x: 10

 

기본생성자라는 것은 명시되어있지 않아도 사실 있습니다.

말씀하신 대로 Child(){}는 코드상 보이지 않지만, 이미 존재합니다.

Parent에도 기본생성자가 없으면 Java 컴파일러가 알아서 끼워 넣어줍니다.

 

자바에서 생성자 자체는 상속받을 수 없습니다.

super()로 부모의 생성자를 호출할 수는 있지만요.

 

그러니까 요약하자면,

원래 코드와 작성해주신 코드는 동작하는 것이 아예 똑같이 해석됩니다.

 

주서님의 프로필 이미지
주서
질문자

2024. 09. 04. 12:59

C와 달리 class간 변수 변동은 없다고 이해하는게 좋을까요.. 뭔가 어렵네요..ㅠㅠ

주말코딩님의 프로필 이미지
주말코딩
지식공유자

2024. 09. 04. 16:35

그렇게 외우시면 또 문제가 되는게, 다른 클래스안의 메서드에서 또 다른 클래스의 인스턴스 변수에 접근할 수는 있습니다..

 

결국 구조 전체를 이해하시는 것이 좋긴한데, 이해가 어려우신 부분을 계속 질문주시는 수 밖에...😭😭😢😢

주서님의 프로필 이미지
주서
질문자

2024. 09. 04. 22:46

아 인스턴스도 있었지요ㅜ

그렇네요.. 고맙습니다

0

주서님의 프로필 이미지
주서
질문자

2024. 09. 04. 11:55

아닙니다 ㅎㅎ 영상 계속보다보니 10분에 영상에 다시 설명을 주셨네요 ! 이부분은 해결 됬습니다.

 

다만 한가지 더 질문이 있는데요,

만약 10:58초 영상에서

class Child extens Parent {

int x = 20;

child()

void display(){

.

.

.

 

이런 식으로 명시하면

답은 Child x : 10

Parent x : 10

이렇게 답이 되는게 맞을까요? 상속부분이 너무 약해서 제대로 이해한건지 알고싶어요

주말코딩님의 프로필 이미지
주말코딩
지식공유자

2024. 09. 04. 12:06

저 Child()라는 것이 자식클래스에 생성자를 넣고 싶으신 것 같은데, 내부 코드까지 다 작성해주셔야 알 수 있습니다. 번거롭더라도 전체 코드예시를 주시면 좋겠습니다.

 

Child로 생성한 객체의 인스턴스 변수 x가 10으로 세팅되려면, 말씀하신 대로 생성자를 통해서 하면 정상적으로 동작하긴 합니다.

예를 들어 자식클래스(Child) 안 쪽에 아래와 같이 추가하면 Child의 x값도 10이 됩니다.

Child() {
 this.x = 10;
}

 

이렇게 해도 되고, 저 안에 매개변수 1개 짜리 this(10)과 같이 줘도 되고요.

방법은 무궁무진합니다. 심지어 다른 메서드에서 스스로의 인스턴스 변수에 접근해서 강제로 바꿀 수도 있고요. (setter라고 불리기도 합니다.)

 

어쨌든, 내 객체 내의 변수를 바꾸면 10으로 바뀝니다. 정확한 예제코드 완성본이 필요합니다.

 

시간이 되실 때 수강평 하나 꼭 부탁드립니다.

제게 큰 힘이 됩니다.. :)

 

0

주말코딩님의 프로필 이미지
주말코딩
지식공유자

2024. 09. 04. 11:49

생성자말고 일반 인스턴스 메서드를 말씀하시는 것일까요?

저 형태는 오로지 자식으로 태어난 경우입니다. 만약에 부모에 있는 메서드를 자식이 재정의했다면 자식 것으로 호출됩니다. 해당 영상에는 c.show()만 부르고 있네요.

 

만약에 display를 부른다고 하더라도, 자식이 재정의했기 때문에 자식 것이 실행됩니다.

주서님의 프로필 이미지
주서
질문자

2024. 09. 04. 12:00

이 내용이 아니였긴한데! 재질문 하나 드릴게요! ㅎㅎ..

주말코딩님의 프로필 이미지
주말코딩
지식공유자

2024. 09. 04. 12:06

네 위에 답변 달아드렸습니다~

주서님의 프로필 이미지
주서
질문자

2024. 09. 04. 12:29

앗 코드 전체로 해서 재질문 드렸습니다!

주서님의 프로필 이미지

작성한 질문수

질문하기