BE전문가 프로젝트

7.상속 본문

JAVA

7.상속

원호보고서 2023. 11. 8. 15:54

클래스 상속

공통된 필드 및 메소드를 여러개로 관리하고 싶을 때 사용한다. 선택된 부모 클래스는 extend로 기술한다.

class Car extends vehicle {
}
  • 여러개의 부모 클래스를 상속할 수 없으므로 extends뒤에는 하나의 부모 클래스만 올 수 있음
  • 부모 클래스에서 private 필드나 메소드는 상속 대상에서 제외된다. 같은 원리로 default일 시 같은 패키지가 아니라면 사용할 수 없다
부모 클래스
public class Vehicle {

    String price;
    String name;
    
    Vehicle(String price, String name) {
        this.price = price;
        this.name = name;
    }
}
자식 클래스
public class Car extends Vehicle {

    String color;

    Car(String price, String name,String color) {
        this.price = price;
        this.name = name;
        this.color = color;
    }
}

 

부모 생성자 호출

모든 객체는 생성자를 호출해야 객체 생성이 가능한다. 자식 객체를 생성하는 과정은 부모 객체를 생성 후 자식 객체가 생성된다. 따라서 자식 객체를 생성할 시 부모 객체도 생성이 된다는 것인데 명시적으로 객체를 생성하지 않았는데 어떻게 부모 객체가 생성이 되는 것일까?

그 이유는 부모 생성자는 자식 생성자의 맨 첫 줄에서 호출된다.

public Car() {
    super();
}

 

컴파일러는 컴파일 시 자동으로 super()라는 코드를 추가한다. super()는 부모의 기본 생성자를 호출하는 것이다.

만일 명시적으로 자식 생성자에 부모 생성자를 호출하고 싶다면 다음과 같은 코드를 생성하면 된다.

 

부모 클래스
public class Vehicle {

    String price;
    String name;

    Vehicle() {
    }
    Vehicle(String price, String name) {
        this.price = price;
        this.name = name;
    }
}
자식 클래스
public class Car  extends Vehicle{

    String color;

    Car(String price, String name, String color) {
        super(price, name);
        this.color = color;
    }
}

부모 클래스에 기본 생성자가 없고 매개 변수를 포함한 생성자만 있다면 super()라는 코드를 명시적으로 작성해줘야 한다.

 

메소드 재정의

부모 클래스의 메소드를 자식 클래스에서 재정의 할 수 있다. 한마디로 수정이 가능하다는 이야기이다. 이것을 오버 라이딩(Overring)이라고 한다.

  • 부모의 메소드와 동일한 메소드 시그니처(리턴 타입, 메소드 이름, 매개변수 선언)
  • 예외처리 변경 불가능
  • 접근 제한 변경 가능
  • final를 붙이게 되면 상속 및 재 정의가 불가능하다.
부모 클래스
public class Calculator {
    double multiplication(double x, double y) {
        return x * y;
    }
}
자식 클래스
public class multiplicationTen extends Calculator {

    @Override
    double multiplication(double x, double y) {
        return x * y *10;
    }
}

위에 코드 와 같이 재 정의가 가능하다.

 

부모 메소드 호출하기

자식 클래스에서 부모 클래스의 메소드를 재정의하게 되면 자식 클래스에서 부모 클래스의 메소드를 사용하지 못하게 된다. 하지만 이를 해결하기 위해서 super.부모 메소드를 사용하면 사용이 가능하다.

'JAVA' 카테고리의 다른 글

9. 추상 클래스  (0) 2023.11.09
8. 클래스의 타입 변환 및 다형성  (0) 2023.11.08
6. 인스턴스 멤버 및 정적 멤버  (0) 2023.11.08
5.객체 지향 프로그래밍(객체 및 Class에 대하여)  (0) 2023.11.07
4. main mathod  (0) 2023.11.06
Comments