상속을 이용한 기술로 부모 타입으로부터 파생된 여러가지 타입의 자식 객체를 부모 클래스 타입 하나로 다룰 수 있는 기술
클래스 형변환
업 캐스팅(Up Casting)
상속 관계에 있는 부모, 자식 클래스 간에 부모타입의 참조형 변수가 모든 자식 타입의 객체 주소를 받을 수 있음 (자동)
e.g.
Car c = new Sonata();
Sonata 클래스는 Car 클래스의 후손
Sonata 클래스형에서 Car 클래스형으로 바뀜 *자식 객체의 주소를 전달받은 부모타입의 참조 변수를 통해서 사용할 수 있는 후손의 정보는 원래 부모타입이었던 멤버만 참조 가능
다운 캐스팅(Down Cating)
자식 객체의 주소를 받은 부모 참조형 변수를 가지고 자식의 멤버를 참조해야 할 경우, 부모 클래스 타입의 참조형 변수를 자식 클래스 타입으로 형 변환하는 것
자동으로 처리되지 않기 때문에 반드시 후손 타입 명시해서 형 변환c
e.g.
Car c = new Sonata();
((Sonata)c.moveSonata() *클래스 간의 형 변환은 반드시 상속 관계에 있는 클래스끼리만 가능
instance of 연산자
현재 참조형 변수가 어떤 클래스 형의 객체 주소를 참조하고 있는지 확인 할 때 사용 클래스 타입이 맞으면 true, 맞지 않으면 false 반환
객체배열과 다형성
다형성을 이용하여 상속 관계에 있는 하나의 부모 클래스 타입의 배열 공간에 여러 종류의 자식 클래스 객체 저장 가능
매개변수와 다형성
다형성을 이용하여 메소드 호출 시 부모타입의 변수 하나만 사용해 자식 타입의 객체를 받을 수 있음
바인딩
실제 실행할 메소드 코드와 호출하는 코드를 연결 시키는 것
프로그램이 실행되기 전에 컴파일이 되면서 모든 메소도는 정작 바인딩 됨
동적 바인딩
컴파일 시 정적 바인딩된 메소드를 실행할 당시의 객체 타입을 기준으로 바인딩 되는 것
동적 바인딩 성립 요건
상속 관계로 이루어져 다형성이 적용된 경우, 메소드 오버라이딩이 되어 있으면 정적으로 바인딩 된 메소드 코드보다 오버라이딩 된 메소드 코드를 우선적으로 수행
추상 클래스(abstract class)
특징
미완성 클래스(abstract 키워드 사용)
자체적으로 객체 생성 불가 -> 반드시 상속하여 객체 생성
abstrct 메소드가 포함된 클래스는 반드시 abstract 클래스
abstract 메소드가 없어도 abstract 클래스 선언 가능
클래스 내에 일반 변수, 메소드 포함 가능
객체 생성은 안되지만 참조형 변수 타입으로는 사용 가능
장점
일관된 인터페이스 제공
꼭 필요한 기능 강제화(공통적이나 자식클래스에서 특수화 되는 기능)
인터페이스
상수형 필드와 추상 메소드만을 작성할 수 있는 추상 클래스의 변형체
메소드의 통일성을 부여하기 위해 추상 메소드만 따로 모아놓은 것으로 상속 시 인터페이스 내에 정의된 모든 추상메소드 구현해야 함
추상 클래스 강화된 버전
객체 생성 불가능, 변수 생성만 가능
상속, 인터페이스 둘다 할때 상속 먼저해야 에러안뜸
여러개 상속 가능
[접근제한자] interface 인터페이스명{
//상수도 멤버로 포함할 수 있음
public static final 자료형 변수명 = 초기값;
//추상 메소드만 선언 가능
[public abstract] 반환자료형 메소드명([자료형 매개변수]);
//public abstract가 생략되기 때문에 오버라이딩 시 반드시 public 표기해야함
}