min's devlog

상속(inheritance) 본문

til/Java

상속(inheritance)

값진 2022. 4. 22. 17:45

상속(inheritance)

  - 기존의 클래스에 기능을 추가하거나 재정의하여 새로운 클래스를 정의하는 것

  - 캡슐화, 추상화와 더불어 객체 지향 프로그래밍(OOP)을 구성하는 중요한 특징 중 하나

  - 상속을 이용하면 기존 클래스의 필드와 메소드를 물려받아 새로운 클래스를 생성할 수 있다.

  - 기존에 정의되어 있던 클래스를 부모 클래스(parent class) 또는 상위 클래스(super class)라고 한다.

  - 상속을 통해 새롭게 작성되는 클래스를 자식 클래스(child class) 또는 하위 클래스(sub class)라고 한다.

 

상속의 장점

  • 기존에 작성된 클래스 재활용 > 코드 중복을 막을 수 있다.
  • 클래스 간의 계층적 관계를 구성해 다형성의 문법적 토대를 마련한다.

 

자식 클래스

  - 자식 클래스는 부모 클래스의 모든 특성을 물려받아 새롭게 작성된다.

  - 부모 클래스에 새로운 필드를 하나 추가하면, 자식 클래스에도 자동으로 추가된 것처럼 동작한다.

 

  * 주의

  - 생성자는 X. 필드와 메소드만이 상속된다.

  - private이나 default로 설정된 멤버는 상속 받더라도 접근은 불가능하다.

class Parent {
    private int a = 10;
    public int b = 20;
}

//extend로 상속
class Child extends Parent {
    public int c = 30;
    void display() {
      // System.out.println(a); 
       System.out.println(b); 
       System.out.println(c);    // 자식 클래스에서 선언한 public 필드 참조

    }
}

 
public class Inheritance {
    public static void main(String[] args) {
        Child ch = new Child();
        ch.display();
    }
}

실행 결과

20
30

주석 처리한 System.out.println(a); 는 상속받은 private 필드를 참조하고 있다. 하지만 부모 클래스의 private 필드는 접근할 수 없어 에러를 발생시켰다.

System.out.println(b); 는 자식클래스에서 선언하지 않은 필드이지만 부모 클래스에서 상속받았으므로 에러나지 않는다.

 

 

Object 클래스

  - 모든 클래스의 부모 클래스

  - 자바의 모든 클래스는 자동으로 Object 클래스의 모든 필드와 메소드를 상속받음 (extends 키워드 사용하지 않아도 됨)-    - 해당 인스턴스의 정보를 문자열로 반환하는 toString() , 값을 비교하는 equals() , 새로운 인스턴스를 생성해 반환하는 clone()

'til > Java' 카테고리의 다른 글

추상 클래스(abstract class)  (0) 2022.04.24
메소드 오버라이딩(method overriding)  (0) 2022.04.23
Package와 import  (0) 2022.04.14
문장을 입력 받아 역순으로 출력하기  (0) 2022.03.23
유효성 검사  (0) 2022.03.23
Comments