기본적인 개념
- 클래스 상속은 is-a 관계
- 강아지 is 동물이다.
- 고양이 is 동물이다.
- 요리사 is 사람이다.
- 경찰관 is 사람이다.
- 인터페이스 구현은 can-do 관계
- 새는 날 수 있다. (can)
- 강아지는 짖을 수 있다. (can)
- 자동차는 달릴 수 있다. (can)
상속(extends)
: 부모 클래스의 기능을 자식 클래스가 물려받는 것 ( 클래스 - 클래스 )
- extends - 확장하다.
- 자식 클래스는 원하는 특징을 추가 및 확장 and 재정의 가능하다 !
오버라이딩(Overridding)이란? 상속받은 메서드를 재정의 하는 것. - 단일 상속만 허용된다.
// 부모 클래스
class Animal {
public void makeSound() {
System.out.println("동물이 소리를 냅니다.");
}
}
// 자식 클래스
class Dog extends Animal {
@Override
public void makeSound() {
System.out.println("강아지가 멍멍 짖습니다.");
}
}
// 사용 예시
Animal animal = new Animal();
animal.makeSound(); // 출력: 동물이 소리를 냅니다.
Dog dog = new Dog();
dog.makeSound(); // 출력: 강아지가 멍멍 짖습니다.
구현(implements)
: 객체 행위의 추상화
: 특정 인터페이스를 클래스에서 구현하는 것 (인터페이스 - 클래스)
: implements - 구현하다.
- 여러 인터페이스를 구현 가능 ( 다중 구현 가능 )
- 인터페이스에 정의된 메서드를 전부 구현해야한다. → 추상메소드 개념
// 인터페이스
interface Flyable {
void fly();
}
// 구현 클래스
class Bird implements Flyable {
@Override
public void fly() {
System.out.println("새가 날개를 펴고 하늘을 날아갑니다.");
}
}
// 사용 예시
Flyable flyable = new Bird();
flyable.fly(); // 출력: 새가 날개를 펴고 하늘을 날아갑니다.
// Bird 클래스가 Flyable 인터페이스의 fly() 메소드를 오버라이드하지 않은 경우
class Bird implements Flyable {
// fly() 메소드 구현 누락
}
// 컴파일 에러 발생
error: Bird must be abstract or implement abstract method fly() in Flyable
class Bird implements Flyable {
^
📌 상속과 구현의 차이 정리
- 상속은 클래스 간의 관계를 나타내는 것이며, 구현은 인터페이스와 클래스 간의 관계를 나타낸다.
- 상속의 경우 단일 상속만이 가능하지만, 인터페이스는 다중 상속이 가능하다.
- 상속의 경우 하위 클래스에서 부모 클래스의 메서드를 전부 오버라이드할 필요는 없지만 인터페이스의 경우 반드시 구현해야한다.
관련포스팅
https://min-jii.tistory.com/53
[JAVA] 인터페이스
인터페이스(interface)란? : 사전적 의미 - 두 장치를 연결하는 접속기 → 두 장치를 객체로 본다면, 인터페이스는 접속기: 서로 관계가 없는 물체들이 상호 작용을 하기 위해서 사용하는 장치나 시
min-jii.tistory.com
'[Java] 자바' 카테고리의 다른 글
| [Intellij] new에서 Class 생성이 안될 때 (0) | 2024.07.22 |
|---|---|
| [JAVA] Getter와 Setter (0) | 2024.07.22 |
| [JAVA] 인터페이스 (1) | 2024.07.08 |
| [JAVA] 생성자 (0) | 2024.07.02 |
| [JAVA] null과 NullPointerException (1) | 2024.06.27 |