jiseongkimu / java_test_1330

0 stars 0 forks source link

상속과 다형성 #23

Open jiseongkimu opened 3 years ago

jiseongkimu commented 3 years ago

상속과 다형성

Human.java

package com.company;

public class Human {

    private String name;
    private int age;

    public Human(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public void eat() {
        System.out.print("eat");
    }
    public void work() {
        System.out.print("Walk");
    }
}

사람의 공통적인 기능을 추출한 Human class. 그리고 이 클래스를 상속받을 두 사람의 클래스를 만든다.

Donghyeon.java

package com.company;

public class Donghyeon extends Human {

    public Donghyeon(String name, int age) {
        super(name, age);
    }

    @Override
    public void work() {
        System.out.print("Go to Company");
    }

    @Override
    public void eat() {
        System.out.print("eat Chicken ");
    }
}

Jiseong.java

package com.company;

public class Jiseong extends Human{
    public Jiseong(String name, int age) {
        super(name, age);
    }

    @Override
    public void eat() {
        System.out.print("eat rice");
    }

    @Override
    public void work() {
        System.out.print("Java Study");
    }

    public void partjob() {
        System.out.print("partjob");
    }
}

사람으로서 공통적인 부분(일하는 것, 먹는 것)을 각자 오버라이딩한다. 같은 사람이라도 하는 행동의 내용은 다를 수 있기 때문이다.

Main.java

package com.company;

public class Main {

    public static void main(String[] args) {

        Human human = new Donghyeon("donghyeon",25);
        human.eat(); // eat Chicken
        human.work(); // Go to Company

        Human human1 = new Jiseong("jiseong",25);
        human.eat(); // eat rice
        human.work(); // Java Study
        human.partjob(); // partjob

    }
}

Human 자료형에 두 가지 객체를 대입하였다. 서로 오버라이딩한 내용이 다르기 때문에 결과도 다르게 나온다.

차이점은 human1은 Jiseong 클래스를 대입하였기 때문에 partjob()을 사용할 수 있다.

이처럼 같은 자료형(Human)에 여러 가지 객체(Donghyeon, Jiseong)를 대입하여 다양한 결과(eat(), work(), partjob())를 얻어내고, 객체를 부품화하여 유지 보수를 용이하게 하는 것을 다형성이라고 한다.

상위클래스를 다양하게 표현하는 것(여러개의 개별적인 클래스를 하나의 부모클래스 객체로 통합 관리하여 효율성을 높이는 것)