작성
·
221
0
안녕하세요
공부하다가 궁금한것이 있어서 여쭤보아요
생성자 호출은
클래스_타입 변수명 = new 클래스_이름(매개변수);
이런식으로 쓴다고 말씀하셧는데
대부분의 코드를 보면 클래스_타입과 클래스_이름이 같드라구요
무조건 같아야 되나요?
같지 않아도 된다면 예시를 알려주실수 있으신가요?
그리고 클래스_타입이 뭔지 설명 가능한가요?
지금 저한테는 클래스_타입과 클래스_이름(); 이
그냥 클래스 이름이라고 느껴지거든요
아직 이해가 부족해서 그런지 헷갈리드라구요
이 문제는 상속에 관련된 문제이지만,
생성자 A a = new B();
((B)a).print();
이 부분이 헷갈리드라구요
클래스 A 에서 a 라는 변수명을 가진것이 B 클래스 객체라는 말인가요?
그리고 괄호()안에 있는것부터 풀어나가야되나요? 순서가 다소 헷갈려서 여쭤보아요
답변 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
0
감사합니다. 엄청 이해가 됐어요. 결국에는 변수명보다는 new B에 중심을 두고 해야되는 문제였네요
기본문제였는데 개념이 부족했나봐요.
이 문제를 제가 풀어봤을땐 x is 4 and y is 4 로 생각이 되더라구요.
하지만 정답은 에러가 있다네요. 제 생각에는 final 이 문제인것 같은데, 혹시 해석이 가능할까요?