💡다형성(Polymorphism) 이란?
다형성의 개념
- 하나의 객체가 여러 가지 타입을 가질 수 있는 것을 의미. 즉, 다형성을 활용하면 부모 클래스가 자식클래스의 동작 방식을 알 수 없어도 오버라이딩을 통해 자식 클래스를 접근할 수 있다.
- 상속 관계에서 구현 가능
- 정보은닉, 상속과 더불어 객체지향 프로그래밍의 가장 큰 특징 중 하나
- 객체지향 프로그래밍의 유연성, 재활용성, 유지보수성에 기본이 되는 특징
- 자식 클래스를 부모 클래스 타입으로 객체를 선언하면 자식 클래스의 메소드가 실행됨.
- 부모 클래스를 자식 클래스 타입으로 객체를 선언할 수 없음.
다형성 예제
class Person {
void print() {
System.out.println("Person클래스의 print()메소드");
}
}
class Student extends Person {
@Override
public void print() {
System.out.println("Student클래스의 print()메소드");
}
}
public class Test {
public static void main(String[] args) {
Person p1 = new Person(); //일반적인 객체 선언
Student st1 = new Student(); //일반적인 객체 선언
Person p2 = new Student(); // 부모 객체로 자식 객체 선언 가능
// Student st2 = new Person(); // 자식 객체로 부모 객체 선언 불가
p1.print();
st1.print();
p2.print();
}
}
<출력 결과>
더보기
Person클래스의 print()메소드
Student클래스의 print()메소드
Student클래스의 print()메소드
instanceof 연산자
- 다형성으로 인해 런타임에 참조 변수가 실제로 참조하고 있는 인스턴스 타입을 확인할 시에 사용.
- [참조변수] instance of [클래스이름] 문법을 사용하며, 왼쪽에 전달된 참조 변수가 실제로 참조하고 있는 인스턴스의 타입이 오른쪽에 전달된 클래스 타입이면 true, 아니면 false를 반환한다.
class Person {
void print() {
System.out.println("Person클래스의 print()메소드");
}
}
class Student extends Person {
@Override
public void print() {
System.out.println("Student클래스의 print()메소드");
}
}
public class Test {
public static void main(String[] args) {
Person p1 = new Person(); //일반적인 객체 선언
Student st1 = new Student(); //일반적인 객체 선언
Person p2 = new Student(); // 부모 객체로 자식 객체 선언 가능
// Student st2 = new Person(); // 자식 객체로 부모 객체 선언 불가
System.out.println("p1");
System.out.println(p1 instanceof Object);
System.out.println(p1 instanceof Person);
System.out.println(p1 instanceof Student);
System.out.println("p2");
System.out.println(p2 instanceof Object);
System.out.println(p2 instanceof Person);
System.out.println(p2 instanceof Student);
}
}
<출력 결과>
더보기
p1
true
true
false
p2
true
true
true
📌Reference
http://www.tcpschool.com/java/java_polymorphism_concept
https://life-with-coding.tistory.com/485
해당 글은 학습한 내용을 개인적으로 정리한 글입니다. 만약 틀린 부분이 있다면 댓글로 남겨주세요:D