몸체 없는 메소드를 포함한 클래스 (미완성 설계도)
추상 클래스일 경우 클래스 선언부에abstract키워드 사용[접근제한자] abstract class 클래스명 {}
미완성 클래스(abstract 키워드 사용)
자체적으로 객체 생성 불가 → 반드시 상속하여 객체 생성
abstract 메소드가 포함된 클래스는 반드시 abstract 클래스
abstract 메소드가 없어도 abstract 클래스 선언 가능
클래스 내에 일반 변수, 메소드 포함 가능
객체 생성은 안 되지만 참조형 변수 타입으로는 사용 가능 (다형성 적용 가능)
추상클래스 변수명 = new 자식();
상속 받은 자식에게 공통된 멤버 제공
일부 기능의 구현을 강제화 (공통적이나 자식 클래스에 따라 재정의 되어야 하는 기능)
몸체 없는 메소드
추상 메소드의 선언부에abstract키워드 사용
상속 시 반드시 구현해야 하는, 오버라이딩이 강제화되는 메소드[접근제한자] abstract 반환형 메소드명(자료형 변수명);
상수형 필드와 추상 메소드만을 작성할 수 있는 추상 클래스의 변형체
메소드의 통일성을 부여하기 위해 추상 메소드만 따로 모아놓은 것으로
상속 시 인터페이스 내에 정의된 모든 추상메소드 구현해야 함
[접근제한자] interface 인터페이스명 {
// 상수도 멤버로 포함할 수 있음
public static final 자료형 변수명 = 초기값;
//추상 메소드만 선언 가능
[public abstract] 반환자료형 메소드명([자료형 매개변수]);
// public abstract가 생략되기 때문에
// 오버라이딩 시 반드시 public 표기해야 함
}
모든 인터페이스의 메소드는 묵시적으로 public abstract
변수는 묵시적으로 public static final
객체 생성은 안 되나 참조형 변수로는 가능(다형성)
다형성을 이용하여 상위 타입 역할 (자식 객체 연결)
인터페이스 구현 객체에 공통된 기능 구현 강제화 ( == 구현 객체간의 일관성 제공)
공동 작업을 위한 인터페이스 제공
(자식클래스의) 공통된 부분을 추출하여 부모클래스를 만드는 것
→ 공통된 필드, 메서드를 가진 클래스를 만들고, 작성된 코드를 자식들이 물려받아 사용.
→ 코드길이 감소, 코드 중복 제거, 재사용성 증가, 자식에 대한 일관된 규칙 제공
[일반 클래스] 상속
부모 클래스도 객체로 만들수 있어야 하는 경우
[추상 클래스] 상속
연관된 클래스의 공통점을 묶되, 부모클래스는 객체로 만들 수 없는 경우
+ 일부 미완성 클래스(abstract 메소드 0개 이상 포함)
ex) Animal 클래스 → 동물 객체는 어떤 동물인가?
eat(), breath() 는 어떻게 수행되는가? → 알 수 없음
하지만, 동물의 공통된 기능명은 알고 있음.
public static finalpublic static final double PI = 3.141592;(public static final) double PI = 3.141592; (묵시적)public abstract(추상메서드)(public abstract) void input( ) input이라는 이름을 자식에게 제공할 뿐