
자바는 상속(Inheritance)라는 개념이 존재한다.
부모 클래스(상위클래스)와 자식 클래스(하위 클래스)가 있고, 자식 클래스는 부모클래스를 선택해서,
그 부모의 멤버를 상속을 받아 그대로 쓸 수 있게 된다.
이미 준비가 되어 있는 클래스를 재 사용을 해서 만들 수 있기 때문에 효율적이고,시간 절약도 된다.
하지만 몇 가지 제한이 있다.
- 부모 클래스의 private 접근 제한을 갖는 필드 밑 메소드는 자식이 물려 받을 수 없다
- 부모와 자식 클래스가 서로 다른 패키지에 있다면,default 접근 제한을 갖는 필드, 메소드도 자식이 물려 받을 수 없다. (접근제한자)
- 그 이외의 경우는 모두 상속의 대상
상속 받는 자식 클래스 명 옆에 extends를 붙이고, 상속할 부모 클래스명을 적는다.
자바는 다중 상속을 허용하지 않는다 !
public class A {...}; //부모 클래스
public class B extends A {...} //자식 클래스
코드 예제
public class Abook {
//필드
String name;
int price;
public void Info() {
System.out.println("책 이름, 가격 : " + name+","+price);
}
public class Bbook extends Abook {
Bbook(String name, int price) { //생성자
this.name = name; // Bbook이 Abook의 필드를 상속받아서 가능한 선언
this.price = price;
}
public static void main (String[] args) {
Bbook B = new Bbook("나의 라임오렌지 나무", 10000);
System.out.print("[구현 결과 1] ");
Bbook.Info();
}
Bbook 클래스가 Abook 의 필드와 메소드를 상속 받는다.
Bbook 클래스 내에 필드나 메소드가 선언 되어 있지 않았음에도
생성자의 this.name 선언이나, main 메서드의 Child.Info() 가 컴파일 에러가 발생하지 않는다.
부모의 필드와 메소드를 그대로 가져다 쓴다!
부모 생성자의 호출 super();
하위 객체를 생성하면, 상위 객체를 먼저 생성 후 하위 객체가 그다음에 생성이 된다.
위 예제는 부모 객체를 생성하는 과정에 구현되어 있지 않는데, 내부적으로는 생성이 되어 있는 상태이다.
생성자는 명시적인 생성자 선언이 없다면, 컴파일러는 알아서 기본 생성자를 생성하여 호출한다.
위 예제에서 상위 클래스(Abook)는 명시적 생성자 선언이 없었고,
하위 클래스(Bbook)는 명시적 생성자 선언이 있다.
여기서 상위 클래스의 생성자 선언은, 하위 클래스의 생성자 선언 내부 첫줄에 super();가 생성이 된다.
상위 클래스의 기본 생성자 선언을 포함해 명시적 생성자 선언이 없기 때문에
컴파일러가 super(); 를 알아서 생성을 한다. 그 super();는 상위 클래스의 기본 생성자를 컴파일러가 호출 하는 것이다.
super(); 는 상위 클래스 (객체) 를 나타내는 키워드이다.
public class Abook {
String name; //필드
int price
public Abook (String name, int price){ //부모 생성자가 있는 경우
this.name = name;
this.price = price;
}
public void Info() {
System.out.println("책 이름과 가격 : " + name +" ,"+ price);
}
public class Bbook extends Abook {
Bbook() { //생성자
super("자바의 정석", 10000); //하위 생성자 첫줄에 선언
}
public static void main(String[] args) {
Bbook B = new Bbook();
System.out.print("[결과] : ");
B.Info();
}
상위클래스에 기본 생성자는 없고, 매개 변수가 있는 명시적 생성자만 있다면
하위 클래스에서는 반드시 생성자 내부 첫줄에 super(매개값, 매개값); 과 같이 선언을 해줘야 한다.
'Backend > JAVA' 카테고리의 다른 글
[JAVA] HashMap (0) | 2022.04.27 |
---|---|
[JAVA] chatAt(int i) - '0' (0) | 2022.04.23 |
[JAVA] Singleton Pattern (0) | 2022.04.21 |
[JAVA] 간단한 도서 관리 프로그램 (0) | 2022.04.20 |
[JAVA] 간단한 커피 자판기 프로그램 (0) | 2022.04.17 |