반응형
abstract class Animal {
// 추상 메서드: 하위 클래스에서 반드시 구현해야 함
abstract void makeSound();
// 일반 메서드: 하위 클래스에서 재정의할 수도, 그대로 사용할 수도 있음
void eat() {
System.out.println("동물이 먹이를 먹습니다.");
}
}
interface Swimmer {
// 추상 메서드: 구현 클래스에서 반드시 구현해야 함
void swim();
}
// 구현 클래스
class Dog extends Animal implements Swimmer {
@Override
void makeSound() {
System.out.println("개가 짖습니다.");
}
@Override
public void swim() {
System.out.println("개가 수영합니다.");
}
}
public class Main {
public static void main(String[] args) {
Dog dog = new Dog();
dog.makeSound(); // "개가 짖습니다."
dog.eat(); // "동물이 먹이를 먹습니다."
dog.swim(); // "개가 수영합니다."
}
}
- 추상클래스 (abstract)
- abstract 클래스는 인스턴스를 생성할 수 없다 !
- abstract 클래스 안에서 abstract 메서드를 포함하면 좋음
- 인터페이스 (interface)
- 다형성을 제공
- 클래스는 하나만 상속받을 수 있지만,
- interface 는 여러 개 상속받을 수 있음
- 추상클래스 vs 인터페이스
- 추상 클래스를 꼭 사용해야하는 경우가 아니라면
- 인스턴스 변수가 필요한 경우
- 생성자가 필요한 경우
- Object 클래스의 메서드를 오버라이딩 하고 싶은 경우
- 추상클래스보다 인터페이스를 쓰는 것이 권장된다.
- 인터페이스가 더 추상적이기 때문 !
- 추상 클래스를 꼭 사용해야하는 경우가 아니라면
https://velog.io/@gillog/Java-Interface-vs-Abstract-Class-%EC%A0%95%EB%A6%AC
나만 abstract 클래스와 인터페이스의 둘이 헷갈려…?
위의 포스팅에서 그림 및 예제와 함께, 이해하려고 노력중이다.
반응형
'백엔드 데브코스' 카테고리의 다른 글
[Java] Optional - nullPointException을 잘 다뤄보자 (0) | 2023.09.25 |
---|---|
[Java] Object 클래스와 주요 메서드 - equals(), hashCode(), toString() (0) | 2023.09.22 |
[Java] Checked & Unchecked exception 의 차이 (0) | 2023.09.22 |
[Java] Enum 이란 (0) | 2023.09.22 |
[Java] 객체지향 프로그래밍으로 개발해야하는 이유 / 클래스와 상속 (0) | 2023.09.22 |