조상클래스 타입의 참조변수로 자손클래스의 인스턴스를 참조할 수 있도록 하였다.
반대로 자손타입의 참조변수로 조상타입의 인스턴스를 참조할 수는 없다.
업캐스팅과 다운캐스팅
자손타입의 참조변수를 조상타입으로 바꾸는 업캐스팅은 자동형변환이 가능하지만,
반대인 조상타입의 참조변수를 자손타입으로 바꾸는 다운캐스팅은 형변환을 생략할 수 없다.
- 추상클래스는 추상메서드를 포함하고 있다는 것을 제외하고는 일반클래스와 전혀 다르지 않다.
- 추상클래스에도 생성자가 있으며, 멤버변수와 메서드를 가질 수 있다.
- 미완성된 클래스로 추상메서드를 가지고 있는 클래스이다.
직접 인스턴스를 만들 수는 없지만, 상속을 통해 다른 클래스 작성에 도움을 주기 위해 사용된다.추상클래스로 지정되면 클래스의 인스턴스를 생성할 수 없다.
선언부만 작성하고 구현부는 작성하지 않은 채로 남겨 둔 것이 추상메서드이다.
선언부만 있고 구현부는 없는 메서드로 자손클래스가 반드시 오버라이딩으로 구현해야 하는 메서드이다.
추상화는 클래스간의 공통점을 찾아서 공통의 조상을 만드는 것이고,
구체화는 상속을 통해 클래스를 구현하고 확장하는 것이다.
오직 추상메서드와 상수만 가질 수 있다.
인터페이스의 상속
인터페이스는 인터페이스로부터만 상속 받을 수 있으며, 클래스와 달리 다중 상속이 가능하다.
인터페이스의 장점
- 개발시간을 단축시킬 수 있다.
- 표준화가 가능하다.
- 서로 관계없는 클래스들에게 관계를 맺어 줄 수 있다.
- 독립적인 프로그래밍이 가능하다.
인터페이스의 이해
- 클래스를 사용하는 쪽(User)과 클래스를 제공하는 쪽(Provider)이 있다.
- 메서드를 사용(호출)하는 쪽(User)에서는 사용하려는 메서드(Provider)의 선언부만 알면 된다.
추상클래스와 인터페이스의 차이
- 추상클래스는 추상메서드가 있을 뿐이지 나머지는 일반클래스와 같지만,
인터페이스는 상수와 추상메서드만을 멤버로 가질 수 있다.
인터페이스를 이용한 다형성
- 매개변수의 타입을 인터페이스로해서 이를 구현한 클래스의 인스턴스를 매개변수로 받을 수 있고,
리턴타입을 인터페이스로 해서 이를 구현한 클래스의 인스턴스를 반환할 수 있다.
디폴트 메서드
- 자손 클래스가 구현하지 않아도 되는 인터페이스의 메서드이다.
| 내부 클래스 | 특징 |
|---|---|
| 인스턴스 클래스 | 외부 클래스의 멤버변수 선언위치에 선언하며, 외부 클래스의 인스턴스멤버처럼 다루어진다. 주로 외부 클래스의 인스턴스멤버들과 관련된 작업에 사용될 목적으로 선언된다. |
| 스태틱 클래스 | 외부 클래스의 멤버변수 선언위치에 선언하며, 외부 클래스의 static멤버처럼 다루어진다. 주로 외부 클래스의 static멤버, 특히 static메서드에서 사용될 목적으로 선언된다. |
| 지역 클래스 | 외부 클래스의 메서드나 초기화블럭 안에 선언되며, 선언된 영역 내부에서만 사용될 수 있다. |
| 익명 클래스 | 클래스의 선언과 객체의 생성을 동시에 하는 이름없는 클래스(일회용) |
[참고 문헌]