질문1
76P(23년 1회 20번)에 main메서드에 child C = new Child();로 정의 후 new Child()문을 실행시켜 class child extends parent { 문의 child()로 이동했습니다.
이때 17P(23년 3회 1번)에 main메서드에 SuperObject a = new SubObject();로 정의 한 부분에서 subObject()가 다른 코드로 이동 되지 않았는데
child() 문과 subObject() 문의 이동 되어 실행되는 여부는 위에 짜여진 코드 중에 child()문은 동일한 코드가 존재하여 그쪽으로 호출된 것이고 subObject()는 동일한 코드가 없기때문에 호출되지 않아 실행되지 않고 그 밑인 a.paint()로 한줄 내려간 것이 맞나요?
질문2
716P(23년 1회 20번)에 class child extends parent의 child()에는 super.이 생략되었다고 유튜브강의에서 말씀 하셨는데 (141120 4분)
이때 17P(23년 3회 1번)에 a.paint()의 호출로 super.paint()가 실행되게 되는데 이때 super.이 없이 paint()만 있어도 child()처럼 super.paint()와 동일하게 실행되는지?
질문3
SuperObject a = new SubObject(); 와 Child c = new Child(); 의 SuperObject a, Child c는 int a(정수형번수 a), char a(문자형 변수a) 등과 같은 맥락의 변수 선언으로 생각하면 되는건가요?
질문 3-1
SuperObject a는 부모클래스를 사용하여 변수선언하였고 Child c는 자식클래스를 사용하여 변수선언을 하였는데 두개가 차이가 있는건지? 있다면 어떤 차이가 있는지 답변 부탁드립니다.
감사합니다.
안녕하세요 길벗수험서 운영팀입니다.
[1]
17쪽의 문제에서는 애초에 (명시적인) 생성자 호출 프로세스가 없기에 76번의 문제와 비교될 수 없습니다.
기본적으로 객체가 생성되었다는 것은 해당 클래스의 생성자를 호출했다는 것을 의미합니다.
(생성자가 명시적으로 선언되지 않았더라도)
상위 클래스를 상속하는 하위 클래스를 객체 선언할 때에는 하위 클래스의 생성자로 먼저 이동한 후, 생성자로 인해 하위 클래스가 메모리에 배정되기 전 먼저 상위 클래스의 생성자로 이동하여 상위 클래스를 메모리에 배정한 후, 다시 하위 클래스의 생성자로 돌아와 하위 클래스를 메모리에 배정하는 프로세스가 숨겨져 있습니다.
이로 인해서 76쪽 문제에서는 Child.Child() {의 첫 줄에서 Parent.Parent() { 로 이동한 것이죠.
[2]
먼저 생성자에서 생략된 표현과 메소드를 구분하셔서 기억해 두시기 바랍니다.
Child.Child()에서 생략된 것은 상위 클래스의 생성자를 호출하는 호출문 Super()이고, Subobject.paint의 super.는 상위 클래스를 가리키는 구분자입니다.
여기서는 super를 생략하면 자기가 자기를 호출하는 재귀문이 됩니다.
[3]
예, 해당 '객체변수의 원본 클래스를 가리킨다.'가 정확하지만 사실상 변수들과 같이 자료형을 가리킨다 봐도 다를 것 없습니다.
[3-1]
SuperObject a는 부모의 형태를 가졌지만 내용물은 자식인 상황이고,
Child c는 부모의 것을 물려받았지만 자식 그 자체인 상황입니다.
Child c와 같은 형태로 쓰는 것이 일반적입니다.
(자식 내용물을 쓸 건데 굳이 부모 형태를 가져야 할 필요는 거의 없죠. 이런 경우가 필요한 특수 상황에서만 사용합니다.)
행복한 하루되세요 :)
-
관리자2024-04-04 14:24:25
안녕하세요 길벗수험서 운영팀입니다.
[1]
17쪽의 문제에서는 애초에 (명시적인) 생성자 호출 프로세스가 없기에 76번의 문제와 비교될 수 없습니다.
기본적으로 객체가 생성되었다는 것은 해당 클래스의 생성자를 호출했다는 것을 의미합니다.
(생성자가 명시적으로 선언되지 않았더라도)
상위 클래스를 상속하는 하위 클래스를 객체 선언할 때에는 하위 클래스의 생성자로 먼저 이동한 후, 생성자로 인해 하위 클래스가 메모리에 배정되기 전 먼저 상위 클래스의 생성자로 이동하여 상위 클래스를 메모리에 배정한 후, 다시 하위 클래스의 생성자로 돌아와 하위 클래스를 메모리에 배정하는 프로세스가 숨겨져 있습니다.
이로 인해서 76쪽 문제에서는 Child.Child() {의 첫 줄에서 Parent.Parent() { 로 이동한 것이죠.
[2]
먼저 생성자에서 생략된 표현과 메소드를 구분하셔서 기억해 두시기 바랍니다.
Child.Child()에서 생략된 것은 상위 클래스의 생성자를 호출하는 호출문 Super()이고, Subobject.paint의 super.는 상위 클래스를 가리키는 구분자입니다.
여기서는 super를 생략하면 자기가 자기를 호출하는 재귀문이 됩니다.
[3]
예, 해당 '객체변수의 원본 클래스를 가리킨다.'가 정확하지만 사실상 변수들과 같이 자료형을 가리킨다 봐도 다를 것 없습니다.
[3-1]
SuperObject a는 부모의 형태를 가졌지만 내용물은 자식인 상황이고,
Child c는 부모의 것을 물려받았지만 자식 그 자체인 상황입니다.
Child c와 같은 형태로 쓰는 것이 일반적입니다.
(자식 내용물을 쓸 건데 굳이 부모 형태를 가져야 할 필요는 거의 없죠. 이런 경우가 필요한 특수 상황에서만 사용합니다.)
행복한 하루되세요 :)