JAVA

[JAVA] 상속 개념 및 예시

개발 공주 2023. 5. 31. 20:09
728x90

클래스간의 관계와 상속

📌 상속의 사전적 정의는 부모가 자식에게 물려주는 행위를 말합니다.

  • 객체 지향 프로그램에서도 부모 클래스의 필드와 메서드를 자식 클래스에게 물려줄 수 있습니다.
  • 상속을 사용하면 적은 양의 코드로 새로운 클래스를 작성할 수도 있고 공통적인 코드를 관리하여 코드의 추가와 변경이 쉬워질 수도 있습니다.
  • 이러한 특성 때문에 상속을 사용하면 코드의 중복이 제거되고 재사용성이 크게 증가하여 생산성과 유지보수성에 매우 유리해 집니다.

📌 클래스간의 상속은 extends 키워드를 사용하여 정의할 수 있습니다.

public class 자식클래스 extends 부모클래스 {

}
  • 상속의 키워드는 extends 
    • 우리는 상속의 개념을 확장의 개념으로 이해해야합니다.

  1. 부모 클래스에 새로운 필드와 메서드가 추가되면 자식 클래스는 이를 상속받아 사용할 수 있다.
  2. 자식 클래스에 새로운 필드와 메서드가 추가되어도 부모 클래스는 어떠한 영향도 받지 않는다.
  3. 따라서 자식 클래스의 멤버 개수는 부모 클래스보다 항상 같거나 많다. 

단일 상속과 다중 상속

📌 Java는 다중상속을 허용하지 않는다.

  • 다중상속을 허용하면 복잡한 소프트웨어의 기능을 구현할 때 여러개의 클래스를 상속받아 쉽게 구현할 수 있다는 장점이 있는데.. 왜? 못할까...ㅋ
  • 왜냐하면 다중상속을 허용하면 클래스간의 관계가 복잡해지는 문제가 생기기 때문이다.
  • 만약 자식 클래스에서 상속받는 서로 다른 부모 클래스들이 같은 이름의 멤버를 가지고 있다면?
  • 자식 클래스에서는 이 멤버를 구별할 수 있는 방법이 없다는 문제가 생긴다. 

예시

Car: 부모 클래스

public class Car {

    String company; // 자동차 회사
    private String model; // 자동차 모델
    private String color; // 자동차 색상
    private double price; // 자동차 가격

    double speed;  // 자동차 속도 , km/h
    char gear = 'P'; // 기어의 상태, P,R,N,D
    boolean lights; // 자동차 조명의 상태

    public String getModel() {
        return model;
    }

    public void setModel(String model) {
        this.model = model;
    }

    public double gasPedal(double kmh, char type) {
        changeGear(type);
        speed = kmh;
        return speed;
    }

    public double brakePedal() {
        speed = 0;
        return speed;
    }

    public char changeGear(char type) {
        gear = type;
        return gear;
    }

    public boolean onOffLights() {
        lights = !lights;
        return lights;
    }

    public void horn() {
        System.out.println("빵빵");
    }

}

SportsCar : 자식 클래스

public class SportsCar extends Car{
    String engine;
    public void booster() {
        System.out.println("엔진 " + engine + " 부앙~\n");
    }
}

Main 클래스

public class Main {
    public static void main(String[] args) {
        // 부모 클래스 객체에서 자식 클래스 멤버 사용
        Car car = new Car();
        // car.engine = "Orion"; // 오류
        // car.booster(); // 오류

        // 자식 클래스 객체 생성
        SportsCar sportsCar = new SportsCar();
        sportsCar.engine = "Orion";
        sportsCar.booster();

        // 자식 클래스 객체에서 부모 클래스 멤버 사용
        sportsCar.company = "GENESIS";
        sportsCar.setModel("GV80");
        System.out.println("sportsCar.company = " + sportsCar.company);
        System.out.println("sportsCar.getModel() = " + sportsCar.getModel());
        System.out.println();

        sportsCar.horn();
        System.out.println(sportsCar.changeGear('D'));
    }
}

'JAVA' 카테고리의 다른 글

[JAVA] final 클래스와 final 메서드  (0) 2023.06.01
[JAVA] 클래스간의 관계  (0) 2023.06.01
[JAVA] 접근 제어자  (0) 2023.05.31
[JAVA] this 와 this()  (0) 2023.05.31
[JAVA] 생성자  (0) 2023.05.31