728x90
반응형
다형성이란?
하나의 객체가 여러가지 타입을 가질 수 있는 것을 의미한다.
자바에서는 이러한 다형성을 부모클래스 타입의 참조 변수로 자식 클래스 타입의 인스턴스를 참조할 수 있도록 구현한다.
다형성은 상속, 추상화와 더불어 객체 지향 프로그래밍을 구성하는 중요한 특징 중 하나이다.
How
- 오버라이딩
- 오버로딩
- 형변환
오버라이딩(Overriding)
- 주로 클래스나 인터페이스를 상속받아 부모 클래스에 있던 함수를 재정의해서 사용하는 것이다.
오버로딩(Overloding)
- 같은 함수라도 인수만 다르면 얼마든지 정의하고 사용할 수 있다.
타입변환
- 부모 클래스 변수에 자식객체 타입을 대입하면, 자동으로 타입 변환이 일어나는 것이다.
Animal Class
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | package johong.study_0719_three; public class Animal { int age; //다형성 - 오버로딩 public void Count() { System.out.println("동물 0마리"); } public void Count(int count) { System.out.println("동물 " + count + "마리"); } public void Count(int count, String type) { System.out.println("동물" + count + "마리 , " + "종류는 " + type ); } //다형성 - 오버라이딩 public void Count(Boolean yn) { System.out.println("동물입니다."); } public void Change() { System.out.println("사람이고, 나이는" + this.age +"살 입니다."); } } | cs |
Dog Class
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | package johong.study_0719_three; public class Dog extends Animal { //다형성 - 오버로딩 public void Count() { System.out.println("강아지 0마리"); } public void Count(int count) { System.out.println("강아지 " + count + "마리"); } public void Count(int count, String type) { System.out.println("강아지" + count + "마리 , " + "종류는 " + type ); } //다형성 - 오버라이딩 @Override public void Count(Boolean yn) { System.out.print("강아지는 "); super.Count(yn); } @Override public void Change() { System.out.println("강아지이고, 나이는" + this.age +"살 입니다." ); } } | cs |
Main Class
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | package johong.study_0719_three; public class Main { public static void main(String[] args) { //다형성 오버로딩 Dog a = new Dog(); a.Count(); a.Count(5); a.Count(5, "시바견"); System.out.println(); //다형성 - 오버라이딩 a.Count(true); a.age = 14; a.Change(); Animal b = new Animal(); b.age = 20; b.Change(); System.out.println(); //다형성 - 타입변환 Animal c = new Dog(); c.age = 92; c.Change(); Dog a1 = new Dog(); Animal b1 = (Dog) a1; System.out.println("동물 인가요? " + (b1 instanceof Animal)); System.out.println("강아지 인가요? " + (a1 instanceof Animal)); } } | cs |
형 변환에서 중요한 점으로,
부모 타입은 자식 타입을 담을 수 있지만, 자식 타입은 부모 타입을 담을 수 없다.
728x90
반응형
'✨ Java > etc' 카테고리의 다른 글
자바(JAVA) - 컴파일 타임(Compile Time) VS 런타임(Runtime) 차이 (0) | 2023.07.19 |
---|---|
자바(JAVA) - this , this() , super , super() 각각 차이점 (0) | 2023.07.18 |
자바(JAVA) - 문자열(String) 메소드 - charAt(), replace(), substring(), indexOf(), contains(), split() (0) | 2023.07.13 |
자바(JAVA) - 퀵 정렬(Quick Sort) (0) | 2023.07.12 |
자바(JAVA) - 메모리 사용 영역(Method, Heap, Stack) (0) | 2023.07.11 |
댓글