[Java] JAVA 다형성이란

조태산·2023년 8월 2일
0

다형성(Polymorphism)

OOP(object-oriented programming)에서 중요한 개념!

각 요소들을 여러가지 자료형으로 표현할 수 있다!

-> 전혀 와닿지가 않는다. 그래서 어떤 식으로 사용하는지 예시를 들어보자

class People {

	public void printfo() {
    	System.out.println("저는 사람입니다.");
    }
}

People 클래스를 생성했다.
printInfo 메서드를 사용하면 "저는 사람입니다." 를 출력한다.

자, 이제 People 클래스를 상속하는 클래스를 만들어보자.

class Man extends People {
}

Man 클래스는 People 클래스를 상속한다. 내용은 없다.

public class Test {
	public static void main(String[] args) {
    Poeple people = new Man();
    
    people.printInfo();
    System.out.println();
    }
}

이렇게 People형으로 Man을 받을 수 있다.

-> 알겠지만, 어떻게 써먹을지 모르겠다.

class Man extends People{
    @Override
    public void printInfo() {
        super.printInfo();
        System.out.println("저는 남자입니다.");
    }
     
    public void drink() {
        System.out.println("꿀꺽꿀꺽");
    }
}

이렇게 Man 클래스를 수정한다면,

상속받은 메서드를 override(덮어씌우기) 가능

public static void func(People people) {
    people.printInfo();
}
public static void main(String[] args) {
   People people = new Man();
   people.printInfo();
   ((Man)people).drink(); 

    Man man=new Man();
    func(man);
}

People 자료형으로 생성된 people은 Man에서 따로 정의한 메서드인 drink를 사용할 수 없다.

사용하기 위해서는 casting(형변환)을 해줘야한다.

그리고 People 객체자료형을 매개변수로 요구하는 func에 Man자료형을 사용할 수 있다.

여기까지 보면, 상속을 통해서 뭐 기능을 확장하거나 변경하는 것이 가능해지고

코드길이 자체도 짧아질 것 같다.

profile
만년개발초보

1개의 댓글

comment-user-thumbnail
2023년 8월 2일

개발자로서 성장하는 데 큰 도움이 된 글이었습니다. 감사합니다.

답글 달기