public class Ex67 {
public static void main(String[] args) {
//Ex67.java
상속
1. 클래스
2. 인터페이스
3. 추상 클래스
-> 무조건 누구나 부모/자식이 될 수 있는 것이 아님
(부모) <- (자식)
클래스 클래스 : (O). 가장 흔한 경우
인터페이스 클래스 : (O). 상속된 추상 클래스(메소드)를 자식이 구현해야 한다.
추상 클래스 클래스 : (O). 구현 멤버는 그대로 상속받고, 추상 멤버는 구현한다.
인터페이스 인터페이스 : (O). 매우 흔한 케이스
추상클래스 추상클래스 : (O). 상속받은 추상 메소드를 자식 클래스가 구현 할 지 안할지는 선택
인터페이스 추상클래스 : (O).
추상클래스 인터페이스 : (X). 부모의 구현된 멤버를 상속받을 수 없어서
클래스 인터페이스 : (X). 부모의 구현된 멤버를 상속받을 수 없어서
클래스 추상클래스 : (X). 일반클래스는 일반 클래스의 부모 역할만 가능
- 일반클래스는 일반 클래스의 부모 역할만 가능
- 일반클래스는 인터페이스나 추상클래스의 부모 역할이 불가능
- 추상 클래스는 추상클래스, 일반 클래스의 부모 역할만 함
- 추상 클래스는 인터페이스의 부모 역할 불가능
- 인터페이스는 인터페이스, 추상클래스, 일반 클래스 등 모든 경우의 부모 역할 가능
- (★) 순서 : (上)인터페이스 <- 인터페이스 <- (中)추상 클래스 <- 추상 클래스 <- (下)일반 클래스
interface AAA { //인터페이스 AAA
void aaa(); //추상 멤버
}
abstract class BBB { //추상클래스 BBB
public int b; //구현된 일반 멤버
public abstract void bbb(); //추상 멤버
}
//abstract class FFF implements BBB { //implements 뒤에 올 수 있는건 오직 인터페이스뿐
abstract class FFF extends BBB { //추상클래스 BBB를 상속받은 추상클래스 FFF
public int f; //본인 멤버 구현
- 부모가 추상메소드를 물려주면 항상 자식은 구현했었음 근데 지금은 구현 안함
- 부모인 추상 클래스가 물려준 추상 메소드를 구현
public void bbb() {
//인터페이스에서는 public abstract void bbb();인데 자식에서는 'abstract'가 빠져있음
-> 얘도 추상 메소드를 받을 수 있는 능력이 있음
//-> 구현을 안해도 됨. 부모가 물려준 추상 메소드를 구현할지/안할지 추상클래스가 자식이 되면 선택 가능
}
class CCC { //일반 클래스 CCC
public int c; //구현된 일반 멤버
}
//interface DDD implements AAA {
//인터페이스가 부모일땐 자식이 누군지 살펴봐야 함. 인터페이스는 클래스, 인터페이스, 추상클래스 모두 자식 가능
interface DDD extends AAA{ //인터페이스 AAA를 물려받은 인터페이스 DDD
//인터페이스를 물려받아도 extends로 상속받음
void ddd(); //추상메소드로서 그대로 물려받음
void aaa(); //인터페이스와 인터페이스끼리 상속받은 것
}
class EEE implements DDD { //인터페이스 DDD를 물려받은 일반클래스 EEE
//인터페이스끼리의 상속도 매우 흔함
public void ddd() {
}
public void aaa() {
}
}
//abstract class GGG extends AAA { extends는 구현부를 갖고있는 애들만 올 수 있음
abstract class GGG implements AAA {
public void aaa() {
// 추상클래스가 부모고 자식이 추상클래스일때랑 똑같음
}
}
//interface HHH implements BBB { 둘 다 안됨
//interface HHH extends BBB {
// public int b; //구현된 일반 멤버 <- 얘는 안됨
// public abstract void bbb(); //추상 멤버 <- 얘는 됨
//}
//abstract class III extends AAA {
}
인터페이스끼리 물려받으면 extends, 일반클래스끼리 받아도 extends, 추상끼리 받아도 extends
-> 같은애들끼리 받으면 extends
일반클래스가 인터페이스를 물려받으면 implements, 추상에는 기본변수가 있어서 인터페이스를 받을 순 없음
-> 다른애들끼리 상속받으면 implements
예외!! 추상에서 일반클래스 받을때는 extends
'[JAVA] 정리 > 클래스(Class)_타입(Type)' 카테고리의 다른 글
| 클래스_오브젝트(Object) (0) | 2023.02.23 |
|---|---|
| 향상된 for문 for(자료형 변수명 : 배열명) (0) | 2023.02.23 |
| 제네릭 클래스(Generic) (0) | 2023.02.23 |
| 클래스_enum (0) | 2023.02.22 |
| 클래스_추상화 클래스(abstract) (0) | 2023.02.22 |