JAVA

[JAVA] ch.11 클래스 타입 변환, 다형성, instanceo, 오버로딩 오버라이딩 차이

바켠주 2024. 4. 6. 01:16
728x90

클래스 타입 변환

-클래스의 객체 타입 변환

- 서로 상속 관계에 있는 클래스 사이에서만 가능하다.

- 자동 형 변환과 강제 형 변환이 있다.

 

자동 형 변환(묵시적 형변환)

- 직접 명시하지 않아도 자동으로 타입 변환이 일어난다.

- 상속 관계에서 자식 클래스의 객체를 부모 타입의 객체로 선언

Parent p1 = new Child();
Child c1 = new Child();
Parent p2 = c1;

*Parent는 부모 클래스, Child는 자식 클래스

강제 형 변환(명시적 형변환)

- 부모 타입을 자식 타입으로 변환한다.

- 부모 타입에서 자식 클래스의 멤버에 접근이 불가능하다.

- 자식 타입이 생성되었을 때만 변환이 가능하다.

- 자식 클래스의 필드와 메서드를 사용해야할 경우 사용한다.

Sonata s = (Sonata)Car;

*부모 타입으로 변환했지만 자식 클래스의 멤버에 접근하고 싶을 때 사용

객체 형 변환 가능 조건

- 객체가 해당 타입을 지녀야 자동, 강제 형 변환 가능

- 상속 받고 있지 않으면 강제 형 변환도 불가능

정리

1. 형 변환 가능 - 강제, 자동

2. 상속 관계가 있을 때만 가능

3. 1차 상속 관계가 아니라도 가능

4. 자식에서 부모로만 변환 가능

5. 부모로 타입 변환한 경우는 자식의 속성이나 기능 사용x(부모 클래스의 메서드를 오버라이딩 한 경우 호출 가능)

다형성

- 하나의 타입으로 다양한 객체를 사용할 수 있다는 것을 의미

- 상속 관계에서 구현 가능

- 객체 지향 프로그래밍의 특징 중 하나

- 유연성, 유지보수성, 재활용성에 좋

- 형 변환으로 부모 클래스 타입 하나로 여러가지 자식 객체들을 참조해 사용하는 것으로 다형성 확인

- 하지만 형 변환은 다형성 구현 방법 중 하나

- 상속, 메서드 오버라이딩, 클래스 타입 변환이 합쳐 다형성 구현

 

instanceof 연산자

- 참조 변수가 참조하고 있는 인스턴스의 실제 타입을 확인할 수 있게 해준다.

형식) A instancof B

- 객체 변수 A가 객체의 타입 B로 생성된 것인 지 확인

- 참조하고 있다면 true, 아니라면 false반환

 

오버로딩 VS 오버라이딩

- 오버로딩 : 하나의 클래스 안에서 같은 이름의 메서드를 여러개 구현할 수 있게 하는 것

- 오버라이딩 : 상속 받은 메서드를 재정의해 사용하는 것