1. 왜 상속을 하지?
우리가 상속을 받는 이유가 뭘까?
남들이 가진 것들이 내게 필요하기 때문이다.
이처럼 프로그래밍에서도 다른 곳의 데이터들을 굳이 새로 또 생성하는 것이 아니라 가져올 수 있게 해준다면 편리하게 사용을 할 수 있기 때문에 상속이란 개념이 생겨났다.
그래서 굳이 자바 뿐만이 아니라 다른 프로그래밍 언어에서도 이러한 개념들은 있다.
이 상속의 개념 안에서 사용되는 용어들은 아래와 같다.
- 재활용
- 부모와 자식
- 조상과 후손(파생)
- super class와 sub class
2. 상속의 문법과 형식
1) 문법
extends(확장), implements(구현)
2) 형식
자식 extends 부모 {}
3. 상속의 이해
1) 상속의 이해
위의 그림을 보면 AA 클래스와 BB 클래스가 있다.
AA 클래스에는 one() 과 two() 라는 매서드가 있다.
BB 클래스는 AA클래스를 상속받은 뒤 three() 매서드를 갖고 있따.
이 때 BB 클래스가 사용할 수 있는 매서드는 총 3가지이다.
이러한 흐름으로 CC는 총 4가지의 매서드를 사용할 수 있다.
AA, BB, CC 클래스의 관계는
AA-BB : 부모 - 자식
BB-CC : 부모 - 자식
AA-CC : 조상 - 후손
2) 다중 상속은 안된다
하지만 DD와 EE를 보자.
EE는 DD의 값을 가져오지만 또 AA의 값을 가져온다고 한다.
이 때 EE 클래스는 오류가 난다.
전혀 다른 두 가지의 클래스를 상속해오는 것은 불가능 하기 때문이다.
3) 코드로 구현해서 확인해보기
위의 그림을 코드로 구현해서 확인해보자.
package oop0914;
// 종단 클래스는 상속받을 수 없다
// final class AA{}
class AA{
private void zero() {} // 상속되지 않음
public void one() {
System.out.println("AA.one()...");
}
public void two() {
System.out.println("AA.two()...");
}
} // class end
class BB extends AA{ // 자식 클래스 BB, 부모 클래스 AA
public void three() {
System.out.println("BB.three()...");
}
} // class end
class CC extends BB{
public void four() {
System.out.println("CC.four()...");
}
} // class end
/*
에러, 클래스간의 상속은 단일 상속만 가능하다
class DD{
public void five() {
System.out.println("DD.five()...");
}
public void six() {
System.out.println("DD.six()...");
}
} // class end
class EE extends AA, DD{} // class end
*/
public class Test03_sangsok {
public static void main(String[] args) {
// 상속 Inheritance
/*
- 재활용
- 부모와 자식, 조상과 후손(파생), super class와 sub class
- 문법 : extends(확장), implements(구현)
- 형식) 자식 extends 부모 {}
*/
AA aa = new AA();
aa.one();
aa.two();
//aa.zero(); 에러. private 속성은 클래스 내부에서만 접근 가능하다
System.out.println("---------------------");
BB bb = new BB();
bb.three();
bb.one();
bb.two();
//bb.zero(); 에러. private 속성은 상속되지 않는다
System.out.println("---------------------");
CC cc = new CC();
cc.four();
cc.three();
cc.two();
cc.one();
System.out.println("---------------------");
} // main() end
} // class end
'⁂ Java > : 기본 익히기' 카테고리의 다른 글
[JAVA] #7-3 Object와 toString() (0) | 2022.09.14 |
---|---|
[JAVA] #7-2 Override (0) | 2022.09.14 |
[JAVA] #6-5 자바의 날짜 관련 함수(GregorianCalendar, Calendar, Date) (0) | 2022.09.14 |
[JAVA] #6-4 Wrapper Class (0) | 2022.09.14 |
[JAVA] #6-3 Getter와 Setter 함수 (0) | 2022.09.13 |