자바 공부 16 : 클래스 상속

친환경 개발자
|2024. 2. 6. 23:17

상속이란?

 

자식 클래스가 부모 클래스의 기능을 그대로 물려받을 수 있는 기능.

자식클래스에 굳이 메서드를 넣지 않아도 자식 클래스의 인스턴스를 생성 하고 부모클래스의 메서드 사용 가능

 

>> 자식클래스에서 부모클래스의 기능에 더하여 더 많은 기능을 갖도록 만들 수 있음

 

 

형태

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

}

 

 

IS-A 관계

상속 관계를 의미함.

자식클래스의 객체는 부모클래스의 자료형인 것처럼 사용 가능

(예시)

Animal : 부모클래스, Dog : 자식클래스 일떄

 

Animal dog = new Dog();     → Dog is a Animal (O)

Dog dog = new Animal();     → Animal is a Dog (X)

 

 

메서드 오버라이딩 : 덮어쓰기

자식클래스가 우선!!

부모클래스와 자식클래스에 같은 이름의 메서드가 정의되었을 때, 메서드를 호출하면 자식클래스의 메서드가 작동한다.

 

메서드 오버로딩

같은 이름의 메서드라도 받는 입력값의 형태가 다르면 같은 클래스 안에 생성 가능

 

다중 상속 X

하나의 클래스가 둘 이상의 클래스를 상속받을 수 없음

class A extends B, C {      → 불가능

}

 

 

 

/* 5-5 상속\
  "extends" 자식 클래스가 부모 클래스의 기능을 그대로 물려받을 수 있는 기능 */
class Animal {
    String name;    // 객체변수 생성

    void setName(String name) {             → 메서드(setName) 생성, 입력값 문자열
        this.name = name;                         → 객체의 객체변수값에 이름 저장
    }
}

class Dog extends Animal {                   → Animal 클래스를 상속한다
    void sleep() {
        System.out.println(this.name+" zzz");
    }
}

class HouseDog extends Dog {
    void sleep(){
        System.out.println(this.name+" zzz in house");
    }

    void sleep(int hour){
        System.out.println(this.name+" zzz in house for " + hour + " hours");
    }
}

public class Day14_2 {
    public static void main(String[] args) {
        Dog dog = new Dog();
        dog.setName("poppy");
        System.out.println(dog.name);
        dog.sleep();

        HouseDog houseDog = new HouseDog();
        houseDog.setName("happy");
        houseDog.sleep();       → 메소드 오버라이딩 : 자식 클래스의 메서드가 더 우선순위 >> zzz in house 출력
        houseDog.sleep(3);     → 메서드 오버로딩 : 같은 메서드명에서도 입력값에 차이를 두어 생성 가능 
                                                                                                                           >> zzz in house for 3 hours 출력
    }
}