new 생성자를 사용할 수 없다.abstract 키워드를 사용한다.extends 키워드로 상속시킨다.interface 키워드를 사용한다.implements 키워드로 구현한다.public abstract 로 정의한다.public static final 상수로 선언한다.🧹
Java는 다중 상속을 지원하지 않는다. 부모를 하나만 선택할 수 있기 때문에,extends대상은 하나만 선택할 수 있다. (부모가 또 부모를 가지는 것은 가능하다.)
중복되는 메소드와 필드가 많은 경우
class Cat {
String name;
int age;
void run(){
*/ ... /*
}
}
class Dog {
String name;
int age;
LocalDateTime walkingTime;
void run(){
*/ ... /*
}
void takeAWalk(){
*/ ... /*
}
}
중복되는 메소드와 필드를 통합한 경우
class Animal {
String name;
int age;
abstract void run();
}
class Cat extends Animal {
void run(){
*/ ... /*
}
}
class Dog extends Animal {
LocalDateTime walkingTime;
void run(){
*/ ... /*
}
void takeAWalk(){
*/ ... /*
}
}
is-a 관계의 근거가 명확해야 한다.// 추상 클래스 (조상 클래스)
abstract class 생명체 {
}
// 추상 클래스 (부모 클래스)
abstract class 포유류 extends 생명체 {
}
abstract class 조류 extends 생명체 {
}
// 자식 클래스
class 사람 extends 포유류 {
}
class 참새 extends 조류 {
}
🫧 추상 클래스를 선택할 때에는 클래스 계층 구조가 명확하고 어떤 개념을 구조적으로 잘 표현할 수 있을 때 사용하는 것이 바람직하다.
is able to 관계에서 인터페이스를 사용할 수 있다.인터페이스로 구현 전
// 추상 클래스 (조상 클래스)
abstract class 생명체 {
abstract void 수영하다();
}
// 추상 클래스 (부모 클래스)
abstract class 포유류 extends 생명체 {
}
abstract class 조류 extends 생명체 {
}
// 자식 클래스
class 사람 extends 포유류 {
abstract void 수영하다();
}
class 참새 extends 조류 {
// 참새는 수영을 할 수 없지만, 상속 관계로 인해 강제적으로 메서드를 구현해야 한다.
abstract void 수영하다();
}
인터페이스로 구현 후
// 추상 클래스 (조상 클래스)
abstract class 생명체 {
}
// 추상 클래스 (부모 클래스)
abstract class 포유류 extends 생명체 {
}
abstract class 조류 extends 생명체 {
}
// 인터페이스
interface 수영가능한 {
void 수영하다();
}
// 자식 클래스
class 사람 extends 포유류 implements 수영가능한, 앞발사용가능한 {
@Override
public void 수영하다() {}
}
class 참새 extends 조류 {
}
// 추상 클래스 (조상 클래스)
abstract class 생명체 {
}
// 추상 클래스 (부모 클래스)
abstract class 포유류 extends 생명체 {
}
abstract class 조류 extends 생명체 {
}
// 인터페이스
interface 수영가능한 {
void 수영하다();
}
interface 앞발사용가능한 {
void 앞발을사용하다();
}
// 자식 클래스
class 사람 extends 포유류 implements 수영가능한, 앞발사용가능한 { // 다중 구현
@Override
public void 수영하다() {}
@Override
public void 앞발을사용하다() {}
}
class 참새 extends 조류 {
}
🫧 인터페이스는 일반적으로 계층 구조로 표현하기 힘든 개념이나 해당 클래스가 어떤 기능을 할 수 있는지 표현할 때 많이 사용한다.
☕ 인터페이스 vs 추상클래스 용도 차이점 - 완벽 이해
추상 클래스와 인터페이스 적재적소에 사용하기
[JAVA] 추상클래스와 인터페이스의 차이
[인프런 Java] 인터페이스 - 다중 구현