추상 클래스는 일반 클래스와 동일하게 멤버변수와 메서드를 가지고, 추상 메서드를 추가적으로 가진다.
인터페이스는 상수만 사용하고, 모든 메서드가 추상 메서드이다. (java8 부터 default 키워드로 일반 메서드 구현 가능)
'추상 메서드' 가 무엇인가?
선언부는 있지만 구현부가 없는 메서드로, 구현체가 이를 재정의해 사용해야 하는 메서드
일반 변수, 일반 메서드, 추상 메서드를 가진다.
Animal의 이름과 어떤 소리를 내는 동물인 지 정한다.
abstract class Animal {
String name;
// 추상 메서드
abstract void makeSound();
// 일반 메서드
void setName(String name) {
this.name = name;
}
// 일반 메서드
void printName() {
System.out.println("Name: " + name);
}
}
보통 추상 메서드만 가진다. (java8 이후 default 메서드 가능)
동물의 동작을 나타내는 추상 메서드가 있다.
interface CanGroom {
void grooming();
}
class Cat extends Animal implements CanGroom {
// Animal 추상 클래스의 추상 메서드 구현
void makeSound() {
System.out.println("Meow meow");
}
// CanGroom 인터페이스의 추상 메서드 구현
public void grooming() {
System.out.println("Groom cleanly");
}
}
public class Main {
public static void main(String[] args) {
Cat cat = new Cat();
Cat.setName("Flower");
Cat.printName();
Cat.makeSound();
Cat.grooming();
}
}
Name: Flower
Meow meow
Groom cleanly
추상 클래스와 인터페이스는 목적이 다르다.
추상 클래스
일반적인 클래스이며, 이를 상속해 기능을 확장하기 위해 사용
인터페이스
인터페이스를 구현한 객체들에 대한 사용법이 동일하며 동일한 동작을 보장하기 위해 사용