Inheritance(상속)
- 한 클래스의 속성과 메서드를 다른 클래스가 물려 받는 기능
- 기존의 클래스를 재사용하여 새로운 클래스를 작성하는 것
- 보다 적은 양의 코드로 새로운 클래스 작성 가능 → 코드의 재사용성 증가, 코드의 중복을 제거: 프로그램의 생산성을 높임
상속 구현 방법
- extends 키워드를 사용하여 상속 구현
- 새로 작성하고자 하는 클래스의 이름뒤에 상속하고자 하는 클래스의 이름을 키워드 extends와 함께 작성
상속해주는 클래스(Parent) : 조상클래스, 부모클래스, 상위클래스 기반클래스, 슈퍼클래스
상속 받는 클래스(Child): 자손클래스, 자식클래스, 하위클래스, 파생클래스, 서브클래스
(예제 코드)
더보기
더보기
class Animal {
String name;
}
// Dog 자식 클래스는 Animal 부모 클래스의 상속을 받음
// : 자식 클래스는 부모 클래스의 모든 멤버를 상속 받기 때문에
// : , 자식 클래스의 멤버(속성, 메서드) 개수는 부모 클래스보다 항상 같거나 많음
// >> 상속에 사용되는 키워드가 extends인 이유
class Dog extends Animal {
// 부모 클래스의 기능을 모두 상속 받기 때문에
// String name; (생략된 것처럼 작용)
// 짖다.
void bark() {
System.out.println("강아지가 짖습니다.");
}
}
class Tv {
boolean power; // 전원 상태(on/off)
int channel; // 채널
void power() { power = !power; }
void channelUp() { ++channel; }
void channelDown() { --channel; }
}
class SmartTv extends Tv {
boolean ott; // OTT 플랫폼 전원 상태(on/off)
void displayOtt(String platform) {
if (ott) { // OTT의 상태가 on(true)일 때만 platform을 보여줌
System.out.println(platform);
} else {
System.out.println("OTT 연결이 되지 않았습니다.");
}
}
}
public class Inheritance01 {
public static void main(String[] args) {
SmartTv stv = new SmartTv();
// 자식 클래스의 인스턴스를 생성하면 부모 클래스의 멤버도 함께 생성
// >> 따로 부모 클래스의 인스턴스를 생성하지 않고도
// , 부모 클래스의 멤버들을 사용 가능
stv.channel = 10; // 부모 클래스로부터 상속받은 멤버(변수)
stv.channelUp(); // 부모 클래스로부터 상속받은 멈버(메서드)
System.out.println(stv.channel);
stv.displayOtt("Netflex"); // OTT 연결이 되지 않았습니다.
stv.ott = true; // OTT 기능을 켬
stv.displayOtt("Netflex");
}
}
상속에서의 생성자
- 상속받은 클래스에서 생성자 호출 순서는 부모 > 자식 순서로 진행
- 자식 클래스의 객체를 생성할 때, 자식 클래스는 자식 생성자를 통해 자식 객체 생성
1. super() 참조 메서드
- 부모 클래스의 생성자를 호출하는데 사용되는 메서드
- 자식 클래스의 기본 생성자는 사용자가 정의하지 않더라도, super() 부모 클래스 생성자 호출 키워드가 정의되어 있음
2. super 참조 변수
- 자식 클래스에서 부모 클래스의 멤버(필드, 메서드)에 접근할 때 사
더보기
더보기
class Mammal {
String name = "Parent";
Mammal() {
System.out.println("빈 부모 생성자");
}
// 사용자 정의 생성자
Mammal(String name) {
this.name = name;
System.out.println("부모 클래스가 생성되었습니다.");
}
}
class Cat extends Mammal {
String name = "Child";
// 1. super() 참조 메서드
// 자식 클래스의 기본 생성자는 사용자가 정의하지 않더라도
// , super() 부모 클래스 생성자 호출 키워드가 정의되어 있음
// 2. super 참조 변수
void greet() {
// 해당 클래스가 가진 인스턴스 변수에 접근(생략)
System.out.println("Hello " + this.name);
// 부모 클래스가 가진 인스턴스 변수에 접근(super키워드를 사용하여 접근)
System.out.println("Hello " + super.name);
}
Cat() {
System.out.println("빈 자식 생성자");
}
Cat(String name) {
// super()는 부모 클래스의 생성자를 가지고 오기 때문에
// , 기본 생성자 또는 사용자 정의 생성자의 형태 그대로를 사용
super(name); // 부모 클래스를 가리킴
System.out.println("자식 클래스가 생성되었습니다.");
}
}
public class Inheritance02 {
public static void main(String[] args) {
// 자식 클래스는 항상 부모 클래스의 생성자를 호출
// : 딘, 항상 직접적으로 정의된 생성자를 필요로 하는 것은 X
Cat voidCat = new Cat();
Cat myCat = new Cat("choco");
// 자식 클래스의 name 호출된 후
// 위의 인스턴스 생성 시 부모 클래스로 전달했던 choco이름의
// , 부모 클래스의 name이 호출
myCat.greet();
}
}
'Java' 카테고리의 다른 글
[Java] Modifier (0) | 2024.09.09 |
---|---|
[Java] Overriding (0) | 2024.09.09 |
[Java] Constructor (0) | 2024.09.06 |
[Java] Overloading (0) | 2024.09.06 |
[Java] Method (0) | 2024.09.06 |