반응형

상속(Inheritance) 이란?

  • 객체지향 프로그램에서 부모클래스(상위클래스)의 변수(필드)나 메소드(함수)를 자식클래스(하위클래스)가 물려받아 자식클래스가 자신의 것처럼 사용할 수 있게하는 것
  • 상속을 하면 코드의 중복을 감소할 수 있고, 유지보수 시간을 단축할 수 있다는 장점이 있음

super란?

  • 클래스에서 this를 사용하면 자기 자신의 변수라는 것을 표현했었음
  • super은 부모를 가르킴

상속 예제

Car class

  • 아래와 같이 Car class가 있고 모든 Car들이 기본적으로 가지고 있는 변수, 메소드라고 가정
class Car {
    int number;
    String brand;
    Car(int number, String brand) {
        this.number = number;
        this.brand = brand;
    }

    String basicCarInfo() {
        return "번호 : " + number + "  브랜드 : " + brand;
    }
}

ACar class

  • A 브랜드에서 만든 차들은 ACar class로 객체 생성을 하는 상황
  • A 브랜드의 최대 속력은 모두 200으로 일치한다고 가정
class ACar extends Car{
    int maxSpeed = 200;

    ACar(int number) {
        super(number, "A Brand");
    }

    void printCarInfo() {
        System.out.println(super.basicCarInfo() + "  최대 스피드 : " + this.maxSpeed);
        System.out.println(super.brand + " " + number);
    }
}
// ACar 객체 생성 및 사용
ACar a = new ACar(1234);
a.printCarInfo();   
/*  출력
    번호 : 1234 브랜드 : A Brand 최대 스피드 : 200
    A Brand 1234 */
  • 위와 같이 생성하면 ACar을 생성할 때 번호만 넘겨주면 자동으로 "A Brand"를 넣어줌
  • 이 때 super() 생성자를 사용하는데, 이는 부모클래스의 생성자를 뜻함 ( Car 생성자 )
  • 또한 super.메소드, super.변수를 사용해서 부모 객체의 메소드, 변수에 직접 접근 할 수도 있음
  • super.변수를 사용할 때, super없이 사용해도 됨

BCar class

  • B 브랜드에서 만든 차들은 BCar class로 객체 생성을 하는 상황
  • B 브랜드의 최대 속력은 모두 달라서 따로 입력을 받아줌
  • A 브랜드와는 달리 옵션을 추가 할 수도 있음
class BCar extends Car{
    int maxSpeed;
    boolean option;

    BCar(int number, int maxSpeed, boolean option) {
        super(number, "B Brand");
        this.maxSpeed = maxSpeed;
        this.option = option;
    }

    void printCarInfo() {
        System.out.println(super.basicCarInfo() + 
        "  최대 스피드 : " + this.maxSpeed + "  옵션 추가 : " + this.option);
    }
}
// BCar 객체 생성 및 사용
BCar b = new BCar(5678, 240, true);
b.printCarInfo();
/*  출력
    번호 : 5678 브랜드 : B Brand 최대 스피드 : 240 옵션 추가 : true */
  • super 생성자를 통해 부모에 존재하는 number, brand 값을 넣어주고, BCar 고유 인스턴스인 maxSpeed, option은 자기 자신의 변수들에 넣어줌
반응형

↓ 클릭시 이동

복사했습니다!