inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

그림으로 배우는 자바, 파트2: 객체지향!

생성자로 객체 값 넣기

생성자 호출

313

이호준

작성한 질문수 4

0

안녕하세요

공부하다가 궁금한것이 있어서 여쭤보아요

생성자 호출은

클래스_타입 변수명 = new 클래스_이름(매개변수);

이런식으로 쓴다고 말씀하셧는데

대부분의 코드를 보면 클래스_타입과 클래스_이름이 같드라구요

무조건 같아야 되나요?

같지 않아도 된다면 예시를 알려주실수 있으신가요?

그리고 클래스_타입이 뭔지 설명 가능한가요?

지금 저한테는 클래스_타입과 클래스_이름(); 이 

그냥 클래스 이름이라고 느껴지거든요

아직 이해가 부족해서 그런지 헷갈리드라구요

Ch11Question10Fig.png

이 문제는 상속에 관련된 문제이지만, 

생성자 A a = new B();

((B)a).print();

이 부분이 헷갈리드라구요

클래스 A 에서 a 라는 변수명을 가진것이 B 클래스 객체라는 말인가요?

그리고 괄호()안에 있는것부터 풀어나가야되나요? 순서가 다소 헷갈려서 여쭤보아요

java oop

답변 3

1

홍팍

레퍼런스 변수는 그 타입에 따라 객체를 해석하는 관점이 달라집니다.

A a = new B();

위 코드는 B 객체를 만들고, 이를 레퍼런스 변수 a로 가리키게한 코드인데요. 변수 a는 B타입 객체를 가리키지만, a는 그 객체가 A타입일 것이라 해석합니다.

따라서, a.print() 라는 메소드를 수행하면 A클래스 내부에 선언된 메소드가 호출되죠. 그 결과 "A"가 출력됩니다.

B클래스에 선언된 메소드가 호출되게 하려면 어떻게 해야할까요? 다음과 같이 해석을 달리해줘야 합니다.

((B)a).print();

해당 코드는 a가 가리키는 객체를 B타입으로 해석한 뒤, print() 메소드를 호출합니다. 따라서, 클래스 B에 선언된 메소드 print()가 실행되죠. 그 결과 "B"가 출력됩니다.

0

홍팍

static 메소드에서 인스턴스 변수 x가 보이지 않아 생기는 문제 같네요.

실제로 타이핑하셔서, 에러 발생 지점과 그 이유를 찾아보시면 좋을 것 같습니다.

0

이호준

감사합니다. 엄청 이해가 됐어요. 결국에는 변수명보다는 new B에 중심을 두고 해야되는 문제였네요

기본문제였는데 개념이 부족했나봐요.

Ch11Question20Fig.png

이 문제를 제가 풀어봤을땐 x is 4 and y is 4 로 생각이 되더라구요.

하지만 정답은 에러가 있다네요. 제 생각에는 final 이 문제인것 같은데, 혹시 해석이 가능할까요?

객체지향 Java 파트2 붕어빵 문제 질문 있습니다.

0

140

2

11장 연습문제 6번

0

156

3

출력값이 다르다고 나오네요!

0

321

1

연습문제 이클립스에서는 되는데요

0

265

1

객체 배열과 반복문 강의 중

0

382

2

클래스 실행 순서가 궁금합니다.

0

662

2

자바api주사위통계 예제2번 질문있습니다

0

314

1

자바를 부탁해 질문

0

675

1

질문있습니다.

0

329

1

강의 정리 내용

0

332

1

유튜버 강의와 차이점 문의드립니다.

0

318

1

홍팍님 교재 문의

0

294

1

외부로부터 감추기 문제 질문

0

235

1

클래스가 다른데 메소드를 어떻게 가져오는건가요?

0

240

1

객체 생성할 때 매개변수에 new연산자는 왜 붙인건가요?

0

306

1

안녕하세요. 생성자관련?하여 질문드립니다.

0

205

1

홍팍쌤 안녕하세요

0

217

1

다형성(?)에대해 질문드립니다.

0

215

1

생성자

0

279

1

Object최상위 클래스에

0

209

1

질문있습니다.

0

166

1

질문있습니다.

0

151

1

void 질문있습니다.

0

177

1

return에 대해 질문있습니다

0

209

1