월루를 꿈꾸는 대학생
ch7-2 객체 본문
5. 다형성
5.1 다형성이란
- 여러가지 형태를 가질 수 있는 능력
- 한 타입의 참조변수로 여러 타입의 객체를 참조할 수 있도록 하는 것
- 참조변수가 사용할 수 있는 멤버의 갯수는 인스턴스 멤버 갯수보다 같가너 적어야한다
조상 클래스 타입 참조변수로 자손 클래스의 인스턴스 참조하는 것
둘 다 같은 타입의 인스턴스지만 참조변수의 타입에 따라 사용할 수 있는 멤버의 갯수가 달라짐
tv 클래스는 부모 클래스로 caption tv의 인스턴스 접근은 가능하지만 captiontv에만 있는 멤버에는 접근이 불가
즉, tv는 옛날 리모컨 , caption tv는 기존의 tv리모컨 + 신기능 들어있는 리모컨
5.2 참조변수의 형변환
- 참조변수도 형변환이 가능 단!! 서로 상속관계에 있는 클래스 사이에서만 가능하다
자손 -> 조상 : 형변환 생략가능 --> 업캐스팅
조상 -> 자손 : 형변환 생략 불가 --> 다운캐스팅!
5.3 instanceof 연산자
참조변수가 참조하고 있는 인스턴스의 실제 타입을 알아보기 위해 사용
반환값이 true / false로
어떤 타입에 대한 instanceof 연산 결과가 true라는 것은 검사한 타입으로 형변환이 가능하다는 뜻 !
5.4 참조변수와 인스턴스의 연결
- 보통 메서드의 경우 부모클래스의 메서드를 자식 클래스에서 오버라이딩 경우 참조 변수의 타입에 관계없이 항상 실제 인스턴스에 있는 즉 오버라이딩 된 메서드가 호출되지만 .... 멤버변수의 경우 참조변수 타입에 따라 값이 다르다
즉. 메서드는 오버라이딩 된 것을 사용 하지만 멤버변수는 참조변수에 따라 다름
6. 추상클래스
6.1 추상클래스란?
추상클래스는 미완성 설계도에 비유가능
미완성 설계도이기에 제품생산은 불가 => 인스턴스 생성불가
다만 새로운 클래스를 작성하는데 있어서 바탕이 되는 의미를 가짐
abstract class 클래스이름 {
//
}
6.2 추상 메서드
- 선언부만 작성하고 구현부는 작성하지 않은 채로 남겨 둔 것이 추상메서드
- 자손클래슨느 오버라이딩을 통해 부모쪽의 추상클래스의 추상 메서드를 모두 구현해주어야한다!!
- 구현부가 없는 메서드의 의미는 선언부를 미리 작성함으로 인한 생산성 상승
6.3 추상 클래스의 작성
추상화 : 클래스간의 공통점을 찾아 공종의 조상을 만드는 작업
구체화 : 상속을 통해 클래스를 구현 , 확장하는 작업
7. 인터페이스
7.1 인터페이스란?
- 일종의 추상클래스
- 오직 추상 메서드와 상수만을 멤버로 가질 수 있따.
- 일반적인 추상클래스가 부분적으로 완성된 미완성 설계도라고 한다면 ... 인터페이스란 아무것도 없는 밑그림만 있는 기본 설계도이다
- 인스턴스 생성 x -> 다만 클래스 작성에 도움을 줄 목적
- 정해진 규칙에 맞게 구현하도록 표준을 제시하는데 사용 !
interface 인터페이스이름 {
public static final 타입 상수이름 = 값 ;
public abstract 메서드이름(매개변수목록);
}
모든 멤버변수는 public static final 이어야 하며 이를 생략 가능
모든 메서드는 public abstract이어야하면 생략 가능
7.3 인터페이스의 상속
- 인터페이스는 인터페이스로부터만 상속을 받을 수 있고 클래스와 달리 다중 상속이가능 !
implements 를 사용해서 상속을 통해 인스턴스 생성이 가능하다
인터페이스의 장점
- 개발시간 단축 가능
- 표준화 가능
- 서로 관계없는 클래스들에게 관계 맺기 가능
- 독립적인 프로그래밍 가능 !
8. 내부 클래스
8.1 내부 클래스란 ?
- 클래스 내에 선언된 클래스
- 내부 클래스에서 외부 클래스의 멤버들을 쉽게 접근 가능
- 코드의 복잡성을 줄일 수 있음 -> 캡슐화
A가 B를 감싸는 외부클래스 B가 내부클래스