Java -다형성(Polymorphism)

백엔드류·2024년 2월 8일

Java

목록 보기
1/6

다형성

다형성이란?
다형성(Polymorphism)은 하나의 타입에서 여러 가지 타입으로 확장할 수 있는 성질을 말합니다.
다형성은 상속, 추상화와 더불어 객체지향 프로그래밍에서 중요한 특징 중 하나로, 다형성을 활용하면 기능을 확장하거나, 객체를 변경해야할 때 타입 변경 없이 객체 생성만으로 타입 변경이 일어나게 할 수 있습니다.

이미지참고 : https://kadosholy.tistory.com/99



//Cat 클래스 (자식)
       public class Cat extends Animal {
               public void eat() {
                   System.out.println("고양이처럼 밥 먹는다");
               }
       }

       //Dog 클래스 (자식)
       public class Dog extends Animal{

           public void eat() {
               System.out.println("강아지처럼 먹어보자");
           }
       }

       //Animal 클래스 (부모)
       public class Animal {
           public void eat() {
               System.out.println("동물처럼 먹다");
           }
       }

       //Override 클래스 (메인)
       public static void main(String[] args) {
       /*
       Upcastiong(업캐스팅) -> 만약 다른 사람이 Dog클래스를 java 소스코드를 주지 않고, 
       class 파일만 주었을 때, Dog 클래스로 선언하기 어려움

       Animal <---> Dog.class(o) Animal 클래스가 Dog클래스와 상속관계에 있다는 것을 
       알고있다는 가정하에 Override 통해 eat()을 재 정의 할 수 있게 됩니다.
       */
               Animal ani = new Dog();
               ani.eat();
       // Animal ----실행시점에서 메서드가 결정되는 것(동적바인딩)---> Dog
       // 작성 시에는 eat()가 Animal에 속해있는 것이라고 생각되어 에러가 나지 않았지만, 실행과 동시에 Dog의 eat()이 실행되게 됩니다 / 이를 동적바인딩이라고 합니다.
               System.out.println("ani = " + ani); //실행결과 : 강아지처럼 먹어보자
           }
       } 

- 부모는 마음이 넓어 자식을 품을 수있다. 자식은 반대로 부모를 품을수 없다고 생각하면 쉽게 이해!
-부모클래스에 있는 메소드를 자식클래스에서 오버라이딩하면 부모 a = 자식 new();를 했을때 자식에 있는 메소드가 실행이 됨
-자식클래스에서 오버라이딩이 아닌 오버로딩한 메소드를 쓸려면 자식 b = 자식 new();를 통해서 써야됨 cf) 오버로딩은 상속과는 무관

[코드 참조] : https://coding-ha-da.tistory.com/34

profile
공부한 내용을 정리한 블로그입니다 & 백엔드 개발자

0개의 댓글