inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

즐거운 자바

43. 생성자 -super가 기본 생성자가 아닐 때

해결된 질문

609

바래

작성한 질문수 2

1

package 객체지향문법_3;

public class Car2 {
    public Car2(String name) {
        super(); // 자동으로 들어간다.
        System.out.println("Car2() 생성자 출력");
    }
}
package 객체지향문법_3;

public class Bus2 extends Car2{
    public Bus2(){
        // 부모의 기본생성자가 없으면 super에 값을 넣어줘야한다.
        super("Bus!!"); // 부모의 기본 생성자를 호출하는 코드가 자동으로 삽입된다.
        System.out.println("Bus2 기본생성자");
    }
}
package 객체지향문법_3;

public class Car2Exam {
    public static void main(String[] args) {
        Car2 c1 = new Car2("urstory");

        Bus2 b1 = new Bus2();
    }
}

 

안녕하세요. 위의 코드에서 이해가 되지 않는 부분이 있어서 질문 남겨요.

 

package 객체지향문법_3;

public class Car2 {
    public Car2(String name) {
        super(); // 자동으로 들어간다.
        System.out.println("Car2() 생성자 출력");
    }
}

Car2 생성자가 파라미터에 값이 들어갔기 때문에 기본 생성자 아니라, super에 값을 넣어 줘야하는건 이해가 갔습니다. 근데 super() 이 부분에 값이 들어가야하는데 정확히 어떤 값이 들어가야하는지 이해가 가질 않습니다. 그래서 구글에서 super 관련 문서 몇개를 찾아봤는데, 좀 다양하게 쓸 수 있는거 같습니다.

class Parent {

    int a;

    Parent() { a = 10; }

    Parent(int n) { a = n; }

}

 

class Child extends Parent {

    int b;

    Child() {

①      //super(40);

        b = 20;

    }

    void display() {

        System.out.println(a);

        System.out.println(b);

    }

}

 

public class Inheritance04 {

    public static void main(String[] args) {

        Child ch = new Child();

        ch.display();

    }

}

 

위의 예시에서는 super부분 주석을 해제하면 부모 생성자의 값인 a를 40으로 초기화할 수 있는거 같고,

public class Vehicle {
    protected int speed;
    
    public Vehicle(int speed) {
        this.speed = speed;
    }
    
    public void move() {
        System.out.println("Vehicle is moving.");
    }
}

public class Car extends Vehicle {
    private String model;
    
    public Car(String model, int speed) {
        super(speed); // 부모 클래스의 생성자 호출
        this.model = model;
    }
    
    @Override
    public void move() {
        super.move(); // 부모 클래스의 move 메소드 호출
        System.out.println("Car is moving.");
    }
    
    public void displayModel() {
        System.out.println("Model: " + model);
    }
}
Car car = new Car("BMW", 100);
car.move(); // "Vehicle is moving."와 "Car is moving." 출력
car.displayModel(); // "Model: BMW" 출력

위의 예시 역시 Car 클래스가 Vehicle 클래스를 상속 받았기 때문에 직접 Car 클래스에서 speed를 수정할 수 없는거 같네요.

package 객체지향문법_3;

public class Bus2 extends Car2{
    public Bus2(){
        // 부모의 기본생성자가 없으면 super에 값을 넣어줘야한다.
        super("Bus!!"); // 부모의 기본 생성자를 호출하는 코드가 자동으로 삽입된다.
        System.out.println("Bus2 기본생성자");
    }
}

 

즐거운 자바 강좌에서는 super("Bus!!")라고 했는데 이게 어떤 의미인지 잘 모르겠어요.

java

답변 1

2

부부 개발단 토토(김성박)

Car2가 기본 생성자가 없기 때문에 상속받는 Bus2의 생성자에서는 Car2가 가지고 있은 다른 생성자를 호출해줘야 합니다. (문법. 호출안하면 컴파일 안됨)

Car2가 가지는 생성자는 Car2(String)이 있죠.

이걸 호출해준겁니다. 원래 Car2생성자는 Car2의 속성을 초기화 하거나 그런 용도일텐데 여기서는 생성자에 넘겨준 값응 출력만 하고 있습니다

0

바래

package 객체지향문법_3;

public class Bus2 extends Car2{
    public Bus2(){
        // 부모의 기본생성자가 없으면 super에 값을 넣어줘야한다.
        super("Bus!!"); // 부모의 기본 생성자를 호출하는 코드가 자동으로 삽입된다.
        System.out.println("Bus2 기본생성자");
    }
}

혹시 그러면 이 부분에서 super("Bus!!") 이 부분에서 Bus!! 를 출력해야하면 코드를 어떻게 수정 해야하나요?

0

부부 개발단 토토(김성박)

Car2샐성자 안에서 받은 String값을 출력해야죠.

0

바래

 

package 객체지향문법_3;

public class Car2 {
    public String name;
    public Car2(String name) {
        super(); // 자동으로 들어간다.
        System.out.println("Car2() 생성자 출력");
        this.name = name;
        System.out.println(name);
    }
}

부모안 Car2 생성자안에서 String값을 출력하니까 되네요. 감사합니다~!!

강사님.. 하단 URL에 있었던 코드들 다운 받거나 공유 부탁 드립니다..

0

15

2

노션 접근권

0

19

1

@Version 어노테이션이 붙은 필드는 낙관적 락이든 비관적 락이든 업데이트가 됩니다.

0

19

1

형 이번에 낸 책이랑 강의 내용에 차이가 있어?

1

36

1

채팅프로그램 한글 깨짐

0

501

2

강의 교안

0

772

2

split 사용에 있어서의 의도치 않은 값 할당이 되고 있네요

0

412

1

추상화와 추상클래스는 다른 말인가요? 그 용도가 궁금합니다

1

509

1

메서드와 프로퍼티의 차이가 뭔가요?

1

381

1

static이 클라스에 부여 되었을 때

1

310

1

Iterator<User> 대신에 Collections.unmodifiableList(users)를 사용해도 되나요?

0

373

1

++,--관련 질문드립니다.

0

433

1

Socket의 InputStream

0

586

2

API 문서가 만들어지지 않습니다

0

578

2

66. 채팅 프로그램 만들기 1/2

0

743

2

65. 네트워크프로그래밍1

0

394

1

this생성자 관련 질문 있습니다!

0

595

2

54. 배열 2편 강의 중

0

396

1

51. 배열 1편 강의 중..

0

306

1

50. 팩토리 메소드 패턴 강의 중

0

293

1

Java Comparator 인터페이스 - 람다 표현

0

677

2

자바 공부법

1

1682

2

class object insatnce

1

694

1

while문의 continue 예제3번에 관한 질문

0

426

2