IT/Java

[Java] 상속(Inheritance)

Huitopia 2024. 3. 7. 21:48
728x90

상속(Inheritance)

기존의 클래스에 기능을 추가하거나 재정의하여 새로운 클래스를 정의하는 것을 의미한다. 기존에 정의되어 있던 클래스(부모 클래스)의 모든 필드와 메소드를 물려받아 새로운 클래스(자식 클래스)를 생성할 수 있다.

 

상속의 장점

  1. 기존에 작성된 클래스를 재활용 가능하므로 중복되는 코드를 줄여 개발 시간이 단축된다.
  2. 자식 클래스 설계 시 중복되는 멤버를 미리 부모 클래스에 작성하면, 자식 클래스에 해당 멤버를 작성하지 않아도 된다.
  3. 부모 클래스를 수정하면 모든 자식 클래스도 수정되기에 최소한만 수정할 수 있다.
  4. 클래스 간의 계층적 관계를 구성하여 다형성의 문법적 토대를 마련한다.

 

문법

public class Child extends Parent {
}

 

자바는 다중 상속을 허용하지 않아, 여러개의 부모 클래스를 상속할 수 없다.

자식 클래스에는 부모 클래스의 필드와 메소드만 상속되며, 생성자와 초기화 블록은 상속되지 않는다.

부모 클래스의 접근 제어가 private 또는 default로 설정된 멤버는 자식 클래스에서 상속받지만 접근할 수 없다.

 

 

super

부모 클래스로부터 상속받은 필드나 메소드를 자식 클래스에서 참조하는 데 사용하는 참조 변수이다. super 참조 변수를 사용하여 부모 클래스의 멤버에 접근할 수 있다. this와 마찬가지로 인스턴스 메소드에만 사용 가능하다.

this는 자식 클래스에서 대입된 값을 출력하고, super는 부모 클래스에서 대입된 값을 출력한다.

예제 코드

더보기
class Parent {
    int a = 10;
}

class Child extends Parent {
    int a = 20;

    void display() {
        System.out.println(a); // 20
        System.out.println(this.a); // 20
        System.out.println(super.a); // 10
    }
}
 
public class Inheritance03 {
    public static void main(String[] args) {
        Child ch = new Child();
        ch.display();
    }
}

 

 

super()

부모 클래스의 생성자를 호출할 때 사용한다. super()는 부모 클래스에 기본 생성자가 있으면 컴파일 과정에서 자동으로 추가되고, 기본 생성자가 없고 매개변수를 갖는 생성자만 있다면 super() 호출 후 매개변수까지 지정해야 한다. 작성한 코드는 매개값의 타입과 개수가 일치하는 부모 생성자를 호출한다.

// 부모 = 기본 생성자
public Child(...) {
	super(); // 컴파일시 자동 추가되나 숨겨져있고 생략 가능
    ...
}

// 부모 = 기본 생성자 없고 매개변수 생성자 있음
public Child(...) {
	super(매개값, ...);
    ...
}

부모 클래스가 매개 변수를 가지면 super(매개값, ...)을 적으라고 경고가 뜬다.

 

매개 변수를 갖는 생성자 예제 코드

더보기
package ch07.sec03.exam02;

public class Phone {
    public String brand;
    public String color;

    public Phone(String brand, String color) {
        this.brand = brand;
        this.color = color;
        System.out.println("Phone(String model, String color) 생성자 실행");
    }
}
package ch07.sec03.exam02;

public class Iphone extends Phone {
    // 자식 생성자 선언
    public Iphone(String brand, String color) {
        super(brand, color);
        System.out.println("Iphone(String brand, String color) 생성자 실행됨");
    }

}
package ch07.sec03.exam02;

public class IphoneExample {
    public static void main(String[] args) {
        Iphone iphone = new Iphone("apple", "black");

        System.out.println("iphone.brand = " + iphone.brand);
        System.out.println("iphone.color = " + iphone.color);
    }
}

 

 

 

 

 

참고 링크

 

코딩교육 티씨피스쿨

4차산업혁명, 코딩교육, 소프트웨어교육, 코딩기초, SW코딩, 기초코딩부터 자바 파이썬 등

tcpschool.com

 

728x90