추상화(Abstraction)
기존 클래스들의 공통적인 요소들을 뽑아서 상위 클래스를 만들어 내는 것
추상 메서드가 최소 하나 이상 포함돼 있는 경우 자동으로 추상 클래스!

// Animal 추상 클래스
abstract class Animal {
public abstract void sound(); // sound 추상 메서드
}
class Dog extends Animal { // Animal을 상속받은 Dog 클래스
public void sound() {
System.out.println("멍멍");
}
class Cat extends Animal { //Animal을 상속받은 Cat 클래스
public void sound() {
System.out.println("야옹");
}
class Test { // dog 인스턴스와 cat 인스턴스 생성 후, sound() 메서드를 호출
public static void main(String[] args) throws Exception {
Animal dog = new Dog();
dog.sound(); // 멍멍
Cat cat = new Cat();
cat.sound(); // 야옹
}
}
final 제어자가 추가되면, 해당 대상은 더 이상 변경이 불가하거나 확장되지 않는 성질 갖는다
final class : 변경 또는 확장 불가능한 클래스, 상속불가
final method() : 오버라이딩이 불가한 메서드
final 변수 : 값 변경이 불가한 상수
추상 메서드와 상수만을 멤버로 가질 수 있는 “추상 메서드의 집합"
class 키워드 대신 interface 키워드를 사용public static final 로 정의 (생략가능)static 과 default 메서드 이외의 모든 메서드가 public abstract 로 정의 (생략가능)implements 키워드를 사용class 클래스명 implements 인터페이스명 {
... // 인터페이스에 정의된 모든 추상메서드 구현
}
class ExampleClass implements ExampleInterface1, ExampleInterface2, ExampleInterface3 {
... 생략 ...
}