객체지향 프로그래밍의 특징 - 다형성
객체지향 프로그래밍의 특징인 다형성의 경우 다음과 같은 경우에서 나타나는 것을 확인할 수 있다.
1. 상속에서의 다형성(인스턴스 업캐스팅, 메소드 오버라이딩)
2. 인터페이스 구현에서의 다형성
1. 상속에서의 다형성
* 클래스 인스턴스 업캐스팅
부모 클래스의 필드와 메소드를 상속받은 자식 클래스로 객체 인스턴스를 만들 경우,
해당 자식 객체 인스턴스를 부모 클래스 타입으로 정의해줄 수 있다.
(반대의 경우는 불가능하다.)
Cat c = new Cat();
Animal a = c; // Cat 객체를 Animal 객체로 해석
* 메소드 오버라이딩
상속관계에 있는 클래스들의 경우 부모 클래스에 정의된 메소드를 자식 클래스에서 이름과 파라미터는 같되, 전혀 다른 기능을 수행하는 메소드로 재정의 해줄 수 있다.
이를 메소드 오버라이딩 이라고 한다.(Method Overriding)
* Overriding VS Overloading
- Overriding : 상위 클래스에 존재하는 메소드를 하위 클래스에 맞게 재정의 하는것(메소드 이름, 파라미터 수 동일)
- Overloading : 두 메소드가 같은 이름을 가지고 있으나, 파라미터의 수나 자료형이 다른 경우
2. 인터페이스 구현에서의 다형성
- 하나의 클래스가 여러개의 인터페이스를 구현할 수 있다.
- 이와 같이 하나의 객체가 여러개의 인터페이스를 구현함으로서 다양한 타입으로 해석되는 것을 다형성 이라고 한다.
- 인터페이스를 통한 다형성을 통해 한 인터페이스를 구현하는 서로 다른 클래스를 한 인터페이의 배열로 묶어주는 것도 가능해진다.
interface Sounding{
}
class Dog implements Sounding{
}
class Baby implements Sounding{
}
class Main {
public static void main(String[] args) {
Sounding dog = new Dog();
Sounding baby = new Baby();
Sounding[] array = {dog, baby};
// 서로 다른 클래스로 만들어진 객체 인스턴스 라도 공통된 인터페이스를 구현하고 있다면
// 해당 인터페이스 타입의 배열로 묶어줄 수 있다.
}
}
* 다형성을 이용할 때 좋은 점?
- 같은 이름의 속성을 유지함 으로서 속성을 사용하기 위한 인터페이스를 유지하고, 메소드 이름을 낭비하지 않게 된다.
'JAVA > 객체지향' 카테고리의 다른 글
JAVA - 객체지향 프로그래밍(OOP) - 추상 클래스 (0) | 2022.01.23 |
---|---|
JAVA - 객체지향 프로그래밍(OOP) - 인터페이스 (0) | 2022.01.23 |
JAVA - 객체지향 프로그래밍(OOP) 특징 - 1 (0) | 2022.01.23 |
JAVA - 객체지향 프로그래밍(OOP) 기본 (0) | 2022.01.22 |