인프런 커뮤니티 질문&답변
업캐스팅 질문
해결된 질문
작성
·
20
답변 2
0
안녕하세요! 말씀하신 두 문제 다 똑같이 부모 것을 먼저 참조하고 있습니다.
super.paint() 전에 super()가 생략되어 있기 때문에 부모에 있는 Constructor of A를 쓴 것이고,
유행 6번에서는 super(10)이 명시적으로 있기 때문에 A의 파라미터 1개짜리인 생성자 of AA 10을 출력한 것입니다.
둘 다 부모의 생성자를 먼저 참조한다는 것에서 같은 원리입니다.
정확히 어떤 부분이 더 헷갈리시는 것인지 대댓글로 추가 질문 부탁드립니다!
오버로딩이라는 것은 같은 이름인데 파라미터로 구분한다는 의미이고,
그것과 상관없이 명시적으로 부모 생성자를 호출하지 않는 구문에서는 다 super()가 생략되어 있다고 보시는 것이 맞습니다!
쓰든 안쓰든, 다른 파라미터 있는 부모생성자를 안 부르면 무조건 기본생성자를 부른다는 의미입니다.
0
안녕하세요, 인프런 AI 인턴입니다. 뽀로님.
업캐스팅과 관련하여 두 가지 예시에서의 차이를 이해하는 것은 중요한 부분입니다. 생성자 호출과 메서드 호출 사이에는 차이가 있으며, 이런 차이가 바로 질문하신 사례에 적용됩니다.
super.paint()와 super(10)의 차이
super.paint():- 이는 부모 클래스의
paint()메서드를 호출합니다.super는 메서드를 명시적으로 호출할 때 사용되며, 부모 클래스에 정의된 메서드를 자식 클래스에서 사용하고자 할 때 이 방식으로 호출합니다.
- 이는 부모 클래스의
super(10):- 생성자 초기에 부모 클래스의 특정 생성자를 호출합니다. 이 경우에는 매개변수가 있는 부모 클래스의 생성자를 호출하는 것으로, 인스턴스가 생성될 때 호출순서를 의미합니다.
- 따라서,
super(10)을 통해 부모의 매개변수가 있는 생성자가 먼저 실행되어 “생성자 of AA10”이 출력됩니다.
- 생성자 초기에 부모 클래스의 특정 생성자를 호출합니다. 이 경우에는 매개변수가 있는 부모 클래스의 생성자를 호출하는 것으로, 인스턴스가 생성될 때 호출순서를 의미합니다.
질문하신 내용의 맥락에서 보면, super.paint()는 메서드 호출을 통해 부모 클래스의 로직을 수행하는 것이고, super(10)은 인스턴스 생성시 부모 클래스의 생성자를 특정하여 호출하여 객체 초기화 시 특정한 로직을 수행하는 것입니다.
관련 질문 URL
이러한 차이를 알면 코드에서 왜 다른 출력이 나오는지를 보다 명확히 이해하실 수 있습니다. 해당 차이는 자바의 상속과 객체 초기화에 대한 이해를 돕습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.





아하!! 그러면 super()는 생성자 오버로딩 경우에 다 존재 하는데, super()는 생략이 가능해서 다 생략되어있고, super(10)은 생략을 못해서 적혀있는건가요?