다형성과 오버라이딩과 오버로딩


누가 다형성이 뭐냐고 물어봤을때.. 오버로딩이나 오버라이딩이 그에 대한 답변이 될수있을까요?

제 생각엔 다형성은 저것보다 좀 더 추가되야 할것같은데요. 그니까 메소드의 구현이 없이 정의된걸 추상클래스라고 하는데 그리고 하위 클래스에서 그 메소드들을 구현한다면 이것도 오버라이딩인가요?

오버로딩은 확실히 맞는 답이 아닌것 같아요.

  • 2016년 01월 22일에 작성됨

조회수 234


1 답변


좋아요
0
싫어요
채택취소하기

다형성을 표현하는 가장 명확한 방법은 추상클래스를 통해서 하는것입니다.

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()의 형태가 달라지는 것이 다형성입니다.

  • 2016년 01월 22일에 작성됨

로그인이 필요한 기능입니다.

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 작성한 답변에 다른 개발자들이 댓글을 작성하거나 좋아요/싫어요를 할 수 있기 때문에 계정을 필요로 합니다.
► 로그인
► 계정만들기
Close