상속 Inheritance
새로운 클래스를 정의할 때 이미 구현된 클래스를 상속받아 속성이나 기능을 확장해 클래스를 구현한다.
이미 구현된 클래스보다 더 구체적인 기능을 가진 클래스를 구현해야할 때 기존 클래스를 상속한다.
// 부모 클래스
class A{
A필드
}
// 자식 클래스
class B extends A{
// A클래스의 메서드 상속
A, B 필드
}
A 클래스를 부모클래스, 상위클래스, 슈퍼클래스, 기반클래스 라고 하고,
B 클래스를 자식클래스, 하위클래스, 서브클래스, 파생클래스 라고 한다.
부모 클래스의 멤버변수의 접근 제어 지시자가 어떤 것인지에 따라서 자식 클래스의 접근 권한이 달라진다.
부모클래스 멤버변수의 접근권한이 private 인 경우,
- 부모클래스의 생성자를 호출해서 초기화 시킬 수 있다.
- 부모클래스에 setter 메소드를 통해서 초기화 시킬 수 있다.
- 변수에 저장된 값은 getter 메소드를 통해 가져온다.
부모클래스 멤버변수의 접근권한이 protect 인 경우,
- 자식클래스에서 접근이 가능하기 때문에 this 키워드를 사용해 초기화한다.
- 자식클래스에서 접근이 가능하기 때문에 변수명으로 값에 직접 접근한다.
- 같은 패키지에 있으면 사용 가능하다.
실행 순서
자식 클래스의 생성자가 실행되기 전에 부모 클래스의 생성자가 먼저 실행된다.
실행할 부모 클래스의 생성자를 지정하지 않으면, 부모 클래스의 기본 생성자가 자동으로 실행된다.
자동으로 입력되는 super()을 지우더라도 자바 컴파일러가 자동으로 넣어준다.
모든 클래스는 Object 클래스를 상속받는다.
예제코드
Fruit.java
public class Fruit { // 부모클래스
// 멤버변수
String name;
int price;
// 메서드
public void showInfo() {
System.out.println("------------");
System.out.println("상품명 : " + name);
System.out.println("가격 : " + price);
System.out.println("------------");
}
}
Peach.java
public class Peach extends Fruit{ // 자식클래스
public Peach() {
super.name = "복숭아";
super.price = 7500;
}
}
Banana.java
public class Banana extends Fruit{ // 자식클래스
public Banana() {
super.name = "바나나";
super.price = 4900;
}
}
FruitMainTest.java
public class FruitMainTest {
public static void main(String[] args) {
// 객체 생성
Peach peach = new Peach();
Banana banana = new Banana();
// 메서드 호출
peach.showInfo();
banana.showInfo();
}
}
'Back-End > Java' 카테고리의 다른 글
[Back-End][Java] 30. 추상 클래스, 후크메서드, 템플릿 메서드 패턴 (0) | 2021.09.14 |
---|---|
[Back-End][Java] 29. 상속 Inheritance (2) - 다형성 / 업∙다운 캐스팅 / instanceof 연산자 (0) | 2021.09.10 |
[Back-End][Java] 27. ArrayList (0) | 2021.09.09 |
[Back-End][Java] 26. 배열 Array (2) - 객체 배열 (0) | 2021.09.07 |
[Back-End][Java] 25. 배열 Array (1) (0) | 2021.09.07 |