다형성(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자료형을 사용할 수 있다.
여기까지 보면, 상속을 통해서 뭐 기능을 확장하거나 변경하는 것이 가능해지고
코드길이 자체도 짧아질 것 같다.
개발자로서 성장하는 데 큰 도움이 된 글이었습니다. 감사합니다.