Spring/Java

[JAVA - OOP 심화3] 다형성

jungha_k 2022. 9. 8. 17:02

 

✨다형성 (polymorphism) 

:하나의 객체가 여러가지 형태를 가질 수 있는 성질

= 상위 클래스 타입의 참조변수를 통해 하위 클래스의 객체를 참조할 수 있도록 허용

 

✨핵심 : 상위클래스 → 하위클래스 객체 참조 가능

반대는 불가능하다!

 

(상위 → 하위는 기능 보유..) (하위→ 상위는 하위의 추가된 기능들을 상위가 어떻게 가능해? 안되기 때문.. )

 

✨예시 : 오버라이딩, 오버로딩


 

✨참조변수 - 타입변환 가능 

: 사용할 수 있는 멤버 갯수 조절

 

✨타입 변환 위한 조건

 

1. 서로 상속관계에 있는 상위 클래스 - 하위 클래스 사이에만 타입 변환이 가능합니다.

2. 하위 클래스 타입에서 상위 클래스 타입으로의 타입 변환(업캐스팅)은 형변환 연산자(괄호)를 생략할 수 있습니다.

3. 반대로 상위 클래스에서 하위 클래스 타입으로 변환(다운캐스팅)은 형변환 연산자(괄호)를 반드시 명시해야합니다.

 

-->

양방향으로 타입 변환 가능하다, but

자식은 부모집을 언제든지 방문가능(업캐스팅)

부모는 자식집을 함부로 다닐 수는 없음(다운캐스팅) - 괄호 필요하다

 

 

✨instance of (boolean 타입) : 캐스팅 가능여부 알아보는 문법

 

ex)

public class InstanceOfExample {
    public static void main(String[] args) {
        Animal animal = new Animal();
        System.out.println(animal instanceof Object); //true
        System.out.println(animal instanceof Animal); //true
        System.out.println(animal instanceof Bat); //false

        Animal cat = new Cat();
        System.out.println(cat instanceof Object); //true
        System.out.println(cat instanceof Animal); //true
        System.out.println(cat instanceof Cat); //true
        System.out.println(cat instanceof Bat); //false
    }
}

class Animal {};
class Bat extends Animal{};
class Cat extends Animal{};