686743304797869
Sun Ryu
  • 2016.6.9 21:50
  • 조회수 164
  • 답변수 1
686743304797869
Sun Ryu
  • 2016.6.9 21:50
  • 조회수 164
  • 답변수 1

매개변수 질문입니다.

public class Car {

public Car(String name){
    System.out.println("Car의 name을 받아들이는 생성자입니다.  ");
}

}

public class Truck extends Car {

public Truck(){
    super("소방차");
    System.out.println("Truck의 기본 생성자입니다. ");
}

}

public class TruckExam {

public static void main(String[] args) {
    Truck t = new Truck();
}

}

위 예시에서 super("소방차")로 써야지 에러 발생이 안나고 실행이 잘 됩니다.
super(name)으로 하면 에러가 발생합니다.
Car생성자의 매개변수가 문자열이므로 소방차로 써야지 에러가 발생 안 하는것은 알겠습니다.

실습에서는 아래와 같이 super(name, number)로 사용해야지만 에러가 발생이 안 됩니다.
왜냐하면 super(name, number) 명령문이 생성자 Bus 안에 있기 때문이것 같아요.
BusExam 클래스에서 인스턴스화 될때 "뛰뛰"와 3000을 받아오기 때문에
뛰뛰는 Bus 생성자의 name에 3000은 Bus의 number에 대입되어서

super name은 Bus의 name 변수, 뛰뛰를 받고
super number은 Bus의 number 변수, 3000을 받는 것 같습니다.

저도 잘 이해가 안되어 계속 고민해 본 후 내린 결론인데 확실히 맞는건지..

public class Bus extends Car {
int fee;
public Bus(String name, int number, int fee) {
// super를 이용해서 Car클래스의 생성자를 이용하세요.
super(name, number);
this.fee = fee;
}
}

  • #자바 입문
  • #Super와 부모생성자 - 실습

1 답변

  • G3rlasealonpd5c2kica
    Demi
    • 2016.6.10 11:19

    위 코드에서는 super(name)은 에러가 발생하는데 아래 코드에서는 super(name)이 에러가 발생하지 않는 이유에 대해서 질문하신 것 같습니다.
    해당 이유는 생성자에 인자에 있는데요. 첫번째 코드의 경우는

        public Truck(){
            super("소방차");
    

    Truck()에서 괄호 안에 인자가 주어지지 않았습니다. 때문에 super(name)과 같이 사용할 경우, name이라는 변수가 지정되지 않았기 때문에 에러가 발생합니다.


    두 번째 코드의 경우는 생성자를 보면

     public Bus(String name, int number, int fee) {
    // super를 이용해서 Car클래스의 생성자를 이용하세요.
        super(name, number);
        this.fee = fee;
    }
    

    Bus(String name, int number, int fee) 에서 인자로 String name이 주어집니다. 따라서 문자열 타입의 name이 정의되어 있기 때문에 super(name)과 같이 사용해도 에러가 발생하지 않습니다. 추가로 설명이 필요하시면 아래에 댓글을 남겨주세요.

    • 감사합니다. 이해되었습니다.-Sun Ryu
      2016.6.14 12:58

답변 쓰기

이 입력폼은 마크다운 문법을 지원합니다. 마크다운 가이드 를 참고하세요.