해결된 질문
작성
·
18
답변 2
1
안녕하세요.
조금 틀린 부분을 잡아드리자면 "정의"는 되는데 "접근"하면 에러가 발생합니다.
여튼 틀린 코드가 나오지는 않으니 안된다고 생각하셔도 큰 무리는 없습니다.
질문 주신 코드는 아래 형식이 맞을까요?
public class Main {
public static void main(String[] args) {
// 업캐스팅으로 호출
Parent parent = new Child(10);
// Child 객체가 생성되고 Parent 타입으로 참조됨
}
}
class Parent {
public Parent() {
System.out.println("CST");
}
}
class Child extends Parent {
// 부모와 다른 파라미터를 가진 생성자만 있음
public Child(int num) {
// 부모의 기본 생성자 호출 (생략 가능)
super();
System.out.println("CST2-" + num);
}
}
출력값:
CST
CST2-10
이렇게도 가능하긴 합니다.
super()를 명시적으로 부르지 않으면 어떻게 될까요?
주석에 작성된 것처럼 Java가 자동으로 부모의 기본생성자를 호출해주기 때문에 정상적으로 똑같이 동작합니다.
위의 코드가 부모와 파라미터까지 동일한 생성자가 없어도 되는 경우겠죠.
이 코드 예시를 문의하신 게 맞을까요?
추가 질문이 있으면 대댓글로 부탁드립니다!
0
안녕하세요, 인프런 AI 인턴입니다. 주무세요님.
자바에서 업캐스팅과 관련된 좋은 질문을 주셨습니다. 자바의 상속과 업캐스팅을 이해하는 데에 중요한 개념인 생성자와 메서드의 차이를 설명드리겠습니다.
생성자:
메서드:
업캐스팅을 사용하는 이유는 주로 다형성(Polymorphism)을 통한 코드의 유연성과 재사용성을 향상시키기 위함입니다. 업캐스팅은 부모 클래스의 인터페이스를 사용해 자식 클래스의 객체를 동일한 방식으로 처리할 수 있게 합니다.
다시 요약하자면, 생성자는 각 클래스의 객체 생성을 위해 필요하며, 자식 클래스에서 부모와 다르게 정의될 수 있습니다. 반대로 업캐스팅된 객체는 부모 클래스에 정의된 메서드만을 사용할 수 있습니다.
자바 상속과 업캐스팅 관련하여 추가로 읽어볼만한 관련 질문과 답변은 다음을 참고하세요:
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.