해결된 질문
작성
·
142
·
수정됨
답변 3
0
음... 그냥 해당 내용 전체인데요 여기에 child()만 추가한 소스입니다
class Parent{
int x = 10;
}
class Child extens Parent {
int x = 20;
child()
void display(){
system.out.println("Child x: " +x);
system.out.println("Parent x: " + super.x);
}
}
public class Main {
public static void main(String[] args) {
Child c = new Child()
c.display();
}
}
해당 코드 사용시 child()생성자에 의해서 부모 클래스를 불러와서 int x=10을 덮어쓰는가에 대한 질문입니다!
0
아닙니다 ㅎㅎ 영상 계속보다보니 10분에 영상에 다시 설명을 주셨네요 ! 이부분은 해결 됬습니다.
다만 한가지 더 질문이 있는데요,
만약 10:58초 영상에서
class Child extens Parent {
int x = 20;
child()
void display(){
.
.
.
이런 식으로 명시하면
답은 Child x : 10
Parent x : 10
이렇게 답이 되는게 맞을까요? 상속부분이 너무 약해서 제대로 이해한건지 알고싶어요
저 Child()라는 것이 자식클래스에 생성자를 넣고 싶으신 것 같은데, 내부 코드까지 다 작성해주셔야 알 수 있습니다. 번거롭더라도 전체 코드예시를 주시면 좋겠습니다.
Child로 생성한 객체의 인스턴스 변수 x가 10으로 세팅되려면, 말씀하신 대로 생성자를 통해서 하면 정상적으로 동작하긴 합니다.
예를 들어 자식클래스(Child) 안 쪽에 아래와 같이 추가하면 Child의 x값도 10이 됩니다.
Child() {
this.x = 10;
}
이렇게 해도 되고, 저 안에 매개변수 1개 짜리 this(10)과 같이 줘도 되고요.
방법은 무궁무진합니다. 심지어 다른 메서드에서 스스로의 인스턴스 변수에 접근해서 강제로 바꿀 수도 있고요. (setter라고 불리기도 합니다.)
어쨌든, 내 객체 내의 변수를 바꾸면 10으로 바뀝니다. 정확한 예제코드 완성본이 필요합니다.
시간이 되실 때 수강평 하나 꼭 부탁드립니다.
제게 큰 힘이 됩니다.. :)
아뇨, 저렇게 하면 여전히 아래처럼 나옵니다.
기본생성자라는 것은 명시되어있지 않아도 사실 있습니다.
말씀하신 대로 Child(){}는 코드상 보이지 않지만, 이미 존재합니다.
Parent에도 기본생성자가 없으면 Java 컴파일러가 알아서 끼워 넣어줍니다.
자바에서 생성자 자체는 상속받을 수 없습니다.
super()로 부모의 생성자를 호출할 수는 있지만요.
그러니까 요약하자면,
원래 코드와 작성해주신 코드는 동작하는 것이 아예 똑같이 해석됩니다.