다형성과 오버라이딩과 오버로딩
조회수 2844회
누가 다형성이 뭐냐고 물어봤을때.. 오버로딩이나 오버라이딩이 그에 대한 답변이 될수있을까요?
제 생각엔 다형성은 저것보다 좀 더 추가되야 할것같은데요. 그니까 메소드의 구현이 없이 정의된걸 추상클래스라고 하는데 그리고 하위 클래스에서 그 메소드들을 구현한다면 이것도 오버라이딩인가요?
오버로딩은 확실히 맞는 답이 아닌것 같아요.
1 답변
-
다형성을 표현하는 가장 명확한 방법은 추상클래스를 통해서 하는것입니다.
public abstract class Human{ ... public abstract void goPee(); }
이런 클래스를 추상클래스라고 부릅니다. 왜냐면 Human클래스에서 goPee()라는 메소드가 구현되지 않았기 때문이죠. 이건 오직 Male이나 Female같은 하위클래스에서 정의됩니다. Human은 추상 클래스입니다.
그래서 Male이나 Female과는 달리 human은 객체를 생성할수없습니다.public class Male extends Human{ ... @Override public void goPee(){ System.out.println("Stand Up"); } } public class Female extends Human{ ... @Override public void goPee(){ System.out.println("Sit Down"); } }
그래서 우리는 이런식으로 Male과 Female을 구현 할수있는데요. 여기서 다형성은
public static void main(String[] args){ ArrayList<Human> group = new ArrayList<Human>(); group.add(new Male()); group.add(new Female()); // ... add more... // tell the class to take a pee break for (Human person : group) person.goPee(); }
이런식으로 group의 자료형이 Human이지만 어떤 자료형으로 객체를 생성하느냐에따라서 goPee()의 형태가 달라지는 것이 다형성입니다.
댓글 입력