💡 먼저 보면 좋을 자료
Code States | OOP 심화(1) - 상속
Code States | OOP 심화(2) - 캡슐화
- 하나의 객체가 다양한 형태를 가질 수 있는 것
- 한 타입의 참조변수로 여러 타입 객체 참조
상속 관계일 때, 하위 클래스의 타입으로 상위 클래스 타입의 객체를 참조하는 것은 불가능함 (반대 가능)
메서드 오버라이딩, 메서드 오버로딩이 이에 해당
코드 중복 감소로 효율적
참조 변수의 타입 변환 → 멤버의 개수 조절
조건
상속관계인 상위 클래스 - 하위 클래스 간 타입 변환이 가능
업캐스팅: 하위 클래스 타입 → 상위 클래스 타입 변환, 형변환 연산자(괄호) 생략 가능
다운캐스팅: 상위 클래스 타입 → 하위 클래스 타입 변환, 형변환 연산자(괄호) 생략 불가
instanceof
연산자: 캐스팅 가능 여부 판단참조변수 instanceof 타입
객체들의 공통 속성 및 기능을 정의
추상 클래스
,인터페이스
를 통해 구현
코드의 중복을 줄일 수 있음
클래스간 관계 설정에 효과적
유지 보수 용이
추상 메서드(abstract method), 추상 클래스(abstract class) 작성 시 사용
추상 메서드
바디가 없는 메서드 (시그니처만 존재)
미완성 메서드
추상 메서드를 포함하는 클래스
객체 생성 불가능
활용
상속관계에서 새로운 클래스 작성 시 효과적으로 사용할 수 있음
상속 시 오버라이딩을 통해 내용 구현
상황에 따라 적절하게 메서드를 구현할 수 있음
필드, 지역변수, 메서드, 클래스 앞에 위치
클래스에 사용: 상속 불가 조건, 변경 및 확장 불가
메서드에 사용: 오버라이딩 불가
변수에 사용: 값 변경 불가 (상수로의 역할)
동일 목적으로 공통 기능을 수행하도록 강제하는 것
코드 수정을 감소시키고 유지보수성을 높이기 위한 목적
다형성 극대화
추상 메서드, 상수만 멤버로 취할 수 있음
추상 클래스보다 더 높은 추상성을 가짐
interface
키워드를 사용
내부 필드 정의: public static final
사용 (생략 가능 - 컴파일러 자동 생성)
메서드 정의: public abstract
사용 (생략 가능 - 컴파일러 자동 생성)
인터페이스 구현 시 implements
키워드 사용
다중 구현 가능 (클래스는 다중 상속 불가)
class 클래스명 implements 인터페이스명 { 코드 }
class 클래스명 implements 인터페이스1, 인터페이스2 { 코드 }