오늘은 다형성에 대해 알아볼 것인데 이것을 설명하기 전에 알아야 할 것
객체지향(OOP)
자바는 객체지향 언어이다.
객체지향
객체가 중심이 되는 것
객체 하나하나가 무슨 일을 할 것인가를 생각해 주어야 한다.
그럼 다형성에 대해 알아보자
다형성
public class Main {
public static void main(String[] args) {
Person p1 = new 김전헌(22);
p1.breath(); //출력 : Person 22 숨쉬다
Person p2 = new 박진수(100);
p2.breath(); // 출력 :Jinsun 100 숨 쉰다.
}
}
//사람 클래스
class Person {
String name;
int age;
Person() {
// this 간략화 중복을 막아줌
this(0);
}
Person(int age) {
this.age = age;
this.name = " ";
}
public void breath() {
System.out.printf("Person %d 숨을 쉬다\n", this.age);
}
}
//김전헌 클래스
class 김전헌 extends Person {
// super을 사용하지 않아도 됨 (복습차 사용함)
김전헌() {
}
김전헌(int age) {
super(age);
this.name = "김전헌";
}
}
//박진수 클래스
class 박진수 extends Person {
// super을 사용하지 않아도 됨 (복습차 사용함)
박진수() {
}
박진수(int age) {
super(age);
this.name = "박진수";
}
public void breath() {
System.out.printf("Jinsun %d 숨 쉰다.\n", this.age);
}
}
잡다한 것이 많이 들어가긴 했으나 내가 몰랐던 것을 구글링 해보면서 만들어 보았다.
특히 this 간략화, 자식 클래스에서의 super 생성자
뭔가 알고리즘 적으로 올바른지는 익숙하지도 않고 오래 생각하며 만들지 않아서
모르겠지만 좀 더 익숙해지기 위한 연습이라 생각한다.
다시 본론
왜 출력이 저렇게 나왔을까?
public class Main {
public static void main(String[] args) {
Person p1 = new 김전헌(22);
p1.breath(); //출력 : Person 22 숨쉬다
Person p2 = new 박진수(100);
p2.breath(); // 출력 :Jinsun 100 숨 쉰다.
}
}
Person p1 = new 김전 헌(22) 이게 어떻게 가능한가
Person Class를 extends 하고 있는 김전헌 Class
즉 Person Class를 상속받고 있기 때문에 가능하다.
p1.breath()는 왜 Person Class의 breath Method를 호출하는 것일까?
그 이유는 다형성에서는 오버 라이딩한 것을 우선순위로 보기 때문이다.
그렇기 때문에 p2.breath()에서는 박진수 Class에서
오버 라이딩한 breath Method가 나오는 것이다.
끝