추상 클래스 는 클래스 간의 계층구조에서 상위에 존재하며 하위 클래스를 대표하는 클래스
추상의 의미대로 “구체적”이지 않은 클래스로 보다 구체적인 하위 클래스를 대표하는 클래스
예시)

⇒ Shape를 추상 클래스로 정의
public abstaract class Shape {
private double x, y;
//추상 메소드
abstract void draw();
}public class Circle extends Shape {
double radius;
public void draw() {
System.out.println("원을 그립니다.");
}
}
public class Circle extends Shape {
double width;
double height;
public void draw() {
System.out.println("사각형을 그립니다.");
}
}추상 메소드는 메소드 몸체가 없는 메소드 적어도 하나 이상의 추상 메소드를 가진 클래스는 반드시 추상 클래스이어야 함 하위 클래스가 추상 메소드를 구현하지 않으면 문법 오류가 발생 → Override 예시) 추상 메소드abstract void draw(); 하위 클래스@Override
void draw() {
System.out.print("그리다");
}abstract class Animal {
abstract void makeSound(); // 추상 메소드
void sleep() { // 일반 메소드
System.out.println("The animal is sleeping");
}
}Animal animal = new Animal() //불가⇒ 추상 클래스는 그 추상 클래스를 상속받아 기능을 이용하고 확장
인터페이스 는 해야 할 작업의 구체적 구현 없이 기능만 선언한 클래스
하위 클래스가 수행해야 하는 메소드와 필요한 상수만을 미리 추상적으로 정의해 놓은 클래스
추상 클래스보다 더 추상적인 클래스
유사성 을 표현하는데 사용의존성 을 줄이거나 없애는데 사용public interface Connectable {
public static fnal String name = "연결";
( public abstract ) void connect();
}public class Printer implements Connectable{
public void connect() {
System.out.println("프린터가 연결됨");
}
}
public class Mouse implements Connectable {
public void connect() {
System.out.println("마우스가 연결됨");
}
}public class Keyboard implements Connectable, Typeable| 추상 클래스 | 인터페이스 | |
|---|---|---|
| 키워드 | abstract | interface |
| 변수 | 제한 없음 | static final (상수) |
| 접근 제어자 | public private, protected, default | public |
| 메소드 | 제한 없음 | 일반 메소드 불가 (default, static은 가능) |
| 상속 키워드 | extends | implements |
| 다중 상속 | 불가능 | 가능 |
| 생성자 | 질 수 있음 | 가질 수 없음 |