[JAVA] ch.11 클래스 타입 변환, 다형성, instanceo, 오버로딩 오버라이딩 차이
클래스 타입 변환
-클래스의 객체 타입 변환
- 서로 상속 관계에 있는 클래스 사이에서만 가능하다.
- 자동 형 변환과 강제 형 변환이 있다.
자동 형 변환(묵시적 형변환)
- 직접 명시하지 않아도 자동으로 타입 변환이 일어난다.
- 상속 관계에서 자식 클래스의 객체를 부모 타입의 객체로 선언
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 오버라이딩
- 오버로딩 : 하나의 클래스 안에서 같은 이름의 메서드를 여러개 구현할 수 있게 하는 것
- 오버라이딩 : 상속 받은 메서드를 재정의해 사용하는 것