JAVA

11. Java 클래스 상속

oioioa 2024. 12. 15. 19:21

1. 상속할 클래스 생생

package entity;

public class Parent {
    String name;
    int age;
    int money;

    public Parent() {
    }

    public void print() {
        System.out.println("이름 : " + this.name);
        System.out.println("나이 : " + this.age);
        System.out.println("자산 : " + this.money);
    }

    public String getName() {
        return this.name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return this.age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public int getMoney() {
        return this.money;
    }

    public void setMoney(int money) {
        this.money = money;
    }
}

 

2. 상속 받을 클래스를 만들때는 클래스명 뒤 extends 를 입력하고 부모 클래스명을 입력해준다.

하단 클래스인 Child  클래스는 Parent 클래스의 멤버변수와 메소드를 상속 받는다는 뜻이다.

 

우리 눈에는 안보이지만 상속받은 코드가 숨어있다.

상속은 하나의 클래스만 입력할 수 있다. = extends 옆에 하나의 클래스만 입력할 수 있다.

package entity;

public class Child extends Parent {
    String hobby;

    public Child() {
    }

    public String getHobby() {
        return this.hobby;
    }

    public void setHobby(String hobby) {
        this.hobby = hobby;
    }

    public void print() {
        super.print();
        System.out.println("취미는: " + this.hobby);
    }
}

 

아래 코드처럼 상속을 받은 클래스는 상속한 클래스의 멤버변수와 메소드를 사용할 수 있다.

상속받을때 프라이빗(private)으로 받은 멤버변수는 직접 억세스가 안된다( = 부모클래스의 private 멤버변수 억세스 제한)

 

import entity.Child;
import entity.Parent;

public class Extend {
    public Extend() {
    }

    public static void main(String[] args) {
        Parent p1 = new Parent();
        p1.setName("홍길동");
        p1.setAge(50);
        p1.setMoney(1000000000);
        p1.print();
        Child c1 = new Child();
        c1.setName("김나나");
        c1.setAge(24);
        c1.setMoney(100000);
        c1.setHobby("게임");
        c1.print();
    }
}

 

객체 생성 동작 방식

객체 생성할때 해당 클래스로 가서 클래스의 오른쪽 확인

1. 상속받은 클래스가 있는지 확인 -> 2. 상속받은 클래스가 있다면 그 클래스로 이동 -> 3. 해당 클래스가 최상위 클래스인지 확인(상속 받은 클래스가 또 있다면 그 클래스로 이동) -> 4. 상속한 클래스(부모 클래스)의 메모리 부터 힙에 저장 -> 5. 상속받은 클래스(자식 클래스)를 저장.