JAVA 기초공부

JAVA - 상속

Dotae1 2025. 2. 5. 18:06

1. 상속

자바에는 자식클래스가 부모클래스의 기능 상속받을 수 있는 상기능이 있다. 예제를 통해 알아보자.

***클래스 상속을 위해서는 extends라는 키워드를 사용한다. 객체 변수 name, setName을 사용하지 않았지만 클래스를 상속받았기때문에 자식클래스에서도 사용이 가능하다.***

class Animal {
    String name;

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

class Dog extends Animal { //Animal클래스를 상속한다.

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

    }

}

ex) 자식 클래스에 기능을 추가해보자.

class Animal {
    String name;

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

class Dog extends Animal { //Animal클래스를 상속한다.
    void sleep() {
        System.out.println(this.name + "졸려");
    }
}
public class HelloWorld{
    public static void main(String[] args) {
        Dog dog = new Dog();
        dog.setName("Dotae");
        System.out.println(dog.name);
        dog.sleep();

    }

}

dog(자식) 클래스에 sleep 기능을 추가하여 더 많은 기능을 사용할 수 있게 되었다.

 

2. IS-A 관계

잘 읽어보도록 하자.

3. 메서드 오버라이딩

class Animal {
    String name;

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

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

}
public class HelloWorld{
    public static void main(String[] args) {
        HouseDog houseDog = new HouseDog();
        houseDog.setName("최다빈");
        houseDog.sleep();
    }
}

 

ex) 여기서 실행을 하게 되면 "최다빈 졸려"라는 값이 출력될 것이다. 하지만 HouseDog클래스에서도 sleep라는 메서드를 실행했을때 졸려가 아닌 집에서 졸고있다라는 값이 출력되도록 하려면 어떻게 해야할까? 

class Animal {
    String name;

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

class Dog extends Animal { //Animal클래스를 상속한다.
    void sleep() {
        System.out.println(this.name + "졸려");
    }
}
class HouseDog extends Dog {
    void sleep() {
        System.out.println(this.name + "집에서 졸고 있다.");
    }

}
public class HelloWorld{
    public static void main(String[] args) {
        HouseDog houseDog = new HouseDog();
        houseDog.setName("최다빈");
        houseDog.sleep();
    }
}

이렇게 Dog 클래스의 sleep메서드를 HouseDog클래스에서 똑같이 구현하여 원하는 값을 얻을 수 있다.

HouseDog클래스에 Dog클래스와 똑같은 sleep 메서드를 구현하면 HouseDog클래스에 sleep메서드가 더 우선순위를 얻어 HouseDog에 있는 sleep메서드가 실행된다.

이처럼 부모클래스에 있는 메서드를 자식클래스에 똑같이 구현하는 행위를 메서드 오버라이딩(메서드 덮어쓰기)이라고 한다.

 

4. 메서드 오버로딩

class Animal {
    String name;

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

class Dog extends Animal { //Animal클래스를 상속한다.
    void sleep() {
        System.out.println(this.name + "졸려");
    }
}
class HouseDog extends Dog {
    void sleep() {
        System.out.println(this.name + "집에서 졸고 있다.");
    }
    void sleep(int hour) {
        System.out.println(this.name + "은 집에서 졸고 있다." + hour + "시간동안");
    }
}

public class HelloWorld{
    public static void main(String[] args) {
        HouseDog houseDog = new HouseDog();
        houseDog.setName("최다빈");
        houseDog.sleep();
        houseDog.sleep(8);
    }
}

HouseDog클래스에 같은 sleep 메서드이지만 입력 형태가 다른 메서드를 만들었다. 이렇게 입력형태가 다른 경우 동일한 이름의 메서드를 만들 수 있는데 이를 메서드 오버로딩이라고 칭한다.

 

5. 다중 상속

다중 상속은 클래스가 동시에 하나 이상의 클래스를 상속받는 것을 뜻한다. C++, 파이썬 등 많은 언어들이 다중 상속을 지원하지만 자바는 다중 상속을 지원하지 않는다.

'JAVA 기초공부' 카테고리의 다른 글

JAVA - 콘솔 입출력  (1) 2025.02.06
JAVA - 생성자  (1) 2025.02.05
JAVA - 메서드  (0) 2025.02.05
JAVA - 클래스  (1) 2025.02.04
JAVA - 객체 지향 프로그래밍이란?  (0) 2025.02.04