개발/JAVA

[JAVA] 다형성

mabb 2022. 5. 23. 23:14
반응형

 안녕하세요. 삶의 질을 높이고자 노력하는 영차영차입니다.
자바 기본기를 탄탄히 다지기 위한 공부 목적 포스팅입니다.
이것이자바다, HeadFirstJava 등의 교재와 구글링을 토대로 본인의 이해를 위해 작성하였으며
계속해서 살을 붙여나갈 계획입니다.
틀린 부분이 있을 경우 댓글 남겨주시면 감사하겠습니다.
---------------------------------------------------------------------------------------------------------

WHY
- 악기 연주를 코딩으로 할 경우,
'피아노'를 연주하다, '기타'를 연주하다, '바이올린'을 연주하다, '템버린'을 연주하다.........'부부젤라'를 연주하다......'오르간'을 연주하다.  하나하나 다 선언하는 것은 비효율적.
- < '악기'를 연주하다>  하나만 선언하고, '악기' 를 상속하는, 또는 구현하는 세상의 모든 악기를 대입한다면 훨씬 효율적.

polymorphism

자바에서는 원칙적으로 변수에 대입되는 값의 타입과 변수의 타입이 같아야함. 클래스 타입의 참조변수의 경우도 마찬가지.
A클래스의 참조변수 a에는 A클래스 타입의 객체 주소만 대입할 수 있음.
A a = new A();
A a = new B(); // 불가.

하지만 B가 A의 자식이라면
A a =  new B(); 가 가능해짐.

A를 상속받는 C, D, E, F, ..... 등의 클래스들이 있다면
A a = new C();
A a = new D();
A a = new E();
A a = new F();

가 가능한 것.

매개변수의 다형성


상속받는 자식클래스(서브클래스) 들은 부모의 멤버를 사용할 수 있고, 부모 메소드를 @Override 하여 자식마다 메소드의 기능을 재정의 할 수 있음. A타입의 변수를 매개변수로 받는 메소드가 있을 때,
다양한 자식, 또는 구현 객체들을 매개변수로 사용함으로써  대입하는 객체에 따라 다양한 기능을 수행할 수가 있다.

public void method1( A a){
  a.play();
}

라는 메소드가 있을 때 매개변수로 A를 상속받은 C,D,E,F,G의 객체들을 넣을 수가 있으며 각각 오버라이드한 play()기능을 수행할 수가 있다.

배열과 다형성

부모타입의 배열에 자식타입이 들어갈 수 있다.

 

 

반응형

'개발 > JAVA' 카테고리의 다른 글

[JAVA] 정규표현식(Regular Expression)  (0) 2022.07.06
[JAVA] 싱글톤  (1) 2022.06.21
[JAVA] 스트림과 병렬처리  (0) 2022.05.19
[JAVA] 멀티스레드  (0) 2022.05.19
[JAVA] 람다식  (0) 2022.05.19