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

조회수 2844회

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

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

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

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

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)