1. 다형성
- 조상 클래스 타입의 찹조변수로 자손클래스의 인스턴스를 참조할 수 있는 것
-> 참조변수의 타입에 따라 사용할 수 있는 멤버의 개수가 달라짐
-> 참조변수 멤버의 개수 <= 인스턴스 멤버의 개수
- 참조변수의 형변환 : 서로 상속관계에 있는 클래스 사이에서만 가능
-> 참조변수의 타입 변환하는 것으로 인스턴스에 영향 없음
-> 형변환을 통해 참조하고 있는 인스턴스에서 사용할 수 있는 멤버의 범위(개수)를 조절하는 것
-> 참조변수가 가리키는 인스턴스의 자손타입으로 형변환은 허용 안함
- instanceof 연산자 : 형변환하기전에 instanceof 체크 필수
-> 참조변수가 참조하고 있는 인스턴스의 실제 타입을 알아보기 위해
-> true : 참조변수가 검산한 타입으로 형변환 가능한 것 (값이 NULL이면 false)
- 참조변수와 인스턴스의 연결
-> 참조변수 타입에 따라 멤버변수 달라짐, 영향은 없음 실제 인스턴스의 메서드(오버라이딩된 메서드) 호출
- 장점1 : 매개변수의 다형성
-> 메서드의 매개변수로 조상 클래스의 자손타입의 참조변수면 어느 것이나 매개변수로 받아들일 수 있음
- 장점2 : 여러 종류의 객체를 배열로 다루기
-> 조상 타입의 참조변수를 배열로 사용 시, 공통의 조상을 가진 서로 다른 종류의 객체르 배열로 묶을 수 있음
2. 추상클래스 (키워드 : abstract)
- 미완성 메서드(추상 메서드)를 포함하고 있는 것
- 인스턴스 생성 X, 상속을 통해 자손클래스에 의해서만 완성가능
- 생성자 존재, 멤버변수, 메서드 선언 가능
- 추상메서드 : 선언부만 작성, 구현부 미작성
-> abstract 리턴타입 메서드이름();
-> 추상클래스로부터 상속받은 자손클래스는 오버라이딩을 통해 조상인 추상클래스의 추상 메서드를 모두 구현해야 함
- 작성 : 추상화는 기존의 클래스의 공통부분을 뽑아내서 조상클래스를 만드는 것
- 추상메서드로 선언하는 이유 : 자손 클래스에서 추상메서드를 반드시 구현하도록 강요하기 위해
3. 인터페이스
- 일종의 추상클래스로 오직 추상메서드, 상수만을 멤버로 가짐
- 목적 : 다른 클래스 작성 시 도움
- 작성 : interface 인터페이스이름{
public static final 타입 상수이름 = 값;
public abstract 메서드이름(매개변수목록);
}
- 다중상속 가능
- 인터페이스의 구현 ( 키워드: implements)
- 상속, 구현 동시에 가능
- 인터페이스를 이용한 다형성
-> 인터페이스 타입의 변수로 인터페이스를 구현한 클래스의 인스턴스 참조 가능
-> 매개변수 타입이 인터페이스인 경우 : 해당 인터페이스를 구현한 클래스의 인스턴스를 매개변수로 제공
-> 메서드의 리턴타입을 인터페이스의 타입을 지정 : 메서드가 해당 인터페이스를 구현한 클래스의 인스턴스를 반환한다는 것
- 인터페이스 장점 : 개발기간 감소, 표준화, 클래스간 관계 생성, 독립적 프로그래밍
- 선언과 구현을 분리 가능
* 인터페이스 : 다중상속, 추상화 높음, 완전껍데기
* 추상클래스 : 단일상속, 추상화, 부족한것 (iv, 메서드)
'Java' 카테고리의 다른 글
| 객체지향 프로그래밍 정리2 (0) | 2018.03.19 |
|---|---|
| 객체지향 프로그래밍 정리1 (0) | 2018.03.19 |