다형성
다양한 형태와 성질을 가진 참조변수를 의미하며, 하나의 참조변수로 여러 클래스의 인스턴스를 참조할 수 있다.
왜 쓰는가?
- 참조변수를 바꾸지 않고, 다양한 인스턴스를 사용하기 위해 사용한다.
다형성과 오버라이딩
다형성을 사용하는데 오버라이딩은 핵심 기술이며, 오버라이딩된 메서드가 우선순위를 가진다.
A obj = new B();
A클래스가 부모 클래스, B클래스가 자식 클래스라 했을 때, B클래스에 A클래스를 오버라이딩한 메서드가 존재한다면, 오버라이딩된 메서드가 호출된다.
**오버라이딩 되지 않은 B클래스의 메서드는 호출할 수 없다.**
접근 방식
상속된 클래스를 생성할 때는 보통 자식클래스를 생성한다.
B obj1 = new B();
이렇게 생성된 클래스는 접근할 때, B클래스를 통해 접근한다.
하지만 다형성을 활용하여 객체를 생성하면
A obj2 = new B();
부모 클래스 타입의 참조변수에 자식 클래스를 생성하여 저장한다.
이렇게 생성된 클래스는 접근할 때, A클래스를 통해 접근하며, A클래스를 통해 B클래스에 접근할 때는 오버라이딩된 메서드에만 접근할 수 있다.
활용 예시
public class a1 {
void 소개팅() {
System.out.println("만남");
}
}
public class b1 extends a1 {
@Override
void 소개팅() {
System.out.println("b1만남");
}
}
public class b2 extends a1 {
@Override
void 소개팅() {
System.out.println("b2만남");
}
}
public class d {
void 연락처전달(a1 연락처) {
연락처.소개팅();
}
}
public class c1 {
public static void main(String[] args) {
d 소개남 = new d();
a1 연락처 = new b1();
소개남.연락처전달(연락처);
}
}
소개팅 메서드가 있는 a1 클래스를 상속받은 클래스 b1, b2가 있다. 각 자식 클래스는 a1클래스의 소개팅 메서드를 오버라이딩했다.
d클래스는 연락처전달 메서드를 가지고 있는데, 매개변수로 a1클래스 타입의 참조변수를 받는다.
해당 메서드가 호출되면, 매개변수로 받은 참조변수 안에 있는 소개팅 메서드를 호출한다.
d클래스를 생성하고, a1클래스 타입을 가진 참조변수에 b1, b2클래스의 인스턴스를 저장한다.
d클래스 안에 있는 연락처전달 메서드를 호출하고, a1클래스 타입의 참조변수를 전달한다.
'Back_end > JAVA' 카테고리의 다른 글
JAVA - 예외처리 (0) | 2024.09.23 |
---|---|
JAVA - 추상 클래스와 인터페이스 (0) | 2024.09.22 |
JAVA - Package와 import (0) | 2024.09.19 |
JAVA - 상속 (0) | 2024.09.19 |
JAVA - 객체 (0) | 2024.09.11 |