추상 클래스
public abstract class 추상클래스명 {
}
- avstract 키워드를 사용하여 추상 클래스를 선언할 수 있음
- 추상 클래스는 추상 메서드를 포함할 수 있음
: 추상 메서드가 없어도 추상 클래스로 선언할 수 있음
- 추상 클래스는 자식 클래스에 상속되어 자식 클래스에 의해서만 완성될 수 있음 (= 미완성된 설계도)
- 추상 클래스는 여러개의 자식 클래스들에서 공통적인 필드나 메서드를 추출해서 만들 수 있음
추상 클래스 상속
public class 클래스명 extends 추상클래스명 {
@Override
public 리턴타입 메서드이름(매개변수, ...) {
// 실행문
}
}
- 추상 메서드는 extends 키워드를 사용해 클래스에서 상속됨
- 상속받은 클래스에서 추상 클래스의 추상 메서드는 반드시
오버라이딩
되어야 함
추상 클래스 사용방법
- 벤츠, 아우디, 제네시스는
horn()
메서드의 내용에 차이가 존재함
- 따라서
horn()
메서드를 추상 메서드로 선언하여 자식 클래스에서 재정의 될 수 있도록 함
- 3개의 자동차가 무조건 오버라이딩해야함
인터페이스
인터페이스의 역할
- 인터페이스는 두 객체를 연결해주는 다리 역할을 해줌
: 사람과 삼성티비, 엘지티비 객체가 존재한다고 생각해봤을 때 사람 객체는 멀티 리모컨 인터페이스를 통해 삼성티비 객체의 채널을 변경할 수 있음
: 이 때, 삼성티비가 아니라 엘지티비로 객체가 교체된다고 해도 채널을 변경할 수 있음
- 상속관계가 없는 다른 클래스들이 서로 동일한 행위 즉, 메서드를 구현해야할 때 인터페이스는 구현 클래스들의 동일한 사용방법과 행위를 보장해줄 수 있음
: 인터페이스는 스펙이 정의된 메서드들의 집합
: 인터페이스의 구현 클래스들은 반드시 정의된 메서드들을 구현해야함
: 따라서 구현 클래스들의 동일한 사용방법과 행위를 보장해줄 수 있음
: 이러한 특징은 인터페이스에 다형성을 적용할 수 있게 만들어줌
인터페이스 선언
public interface 인터페이스명 {
}
- 인터페이스는 클래스와 마찬가지로 public, defalut 접근 제어자를 지정할 수 있음
인터페이스 구성
- 모든 멤버 변수는 public static final 이어야 함 (생략 가능)
- 모든 메서드는 public abstract 이어야 함
: static 메서드와 default 메서드 예외하고 생략 가능
- 생략되는 제어자는 컴파일러가 자동으로 추가해줌
인터페이스 구현
-
인터페이스는 추상 클래스와 마찬가지로 직접 인스턴스를 생성할 수 없기 때문에 클래스에 구현되어 생성됨
-
inplements 키워드를 사용하여 인터페이스를 구현할 수 있음
-
인터페이스의 추상 메서드는 구현될 때 반드시 오버라이딩 되어야 함
-
인터페이스의 추상 메서드를 일부만 구현해야 한다면 해당 클래스를 추상 클래스로 변경해주면 됨
인터페이스 상속
-
인터페이스간의 상속은 implements 가 아니라 extends 키워드를 사용함
-
인터페이스는 클래스와 다르게 다중 상속이 가능함
-
인터페이스 C는 아무것도 선언되어있지 않지만 인터페이스 A,B를 다중 상속 받았기 때문에 추상 메서드 a,b를 갖고 있는 상태임