반응형
[Java Class.06] 상속(Inheritance)
1.클래스 상속(Class inheritance)
- 부모가 자식에게 상속을 하듯이, 객체 지향 프로그램에서도 부모 클래스의 멤버를 자식 클래스에게 상속할 수 있다.
- 부모 클래스를 상위 클래스라고 부르기도 하고, 자식 클래스를 하위 클래스 or 파생 클래스라고 부른다.
- 상속은 이미 잘 개발된 클래스를 재사용하는 방법이므로 코드의 중복을 줄여준다.
// parent class
public class Phone {
String model;
String color;
void powerOn() {
System.out.println("Power on.");
}
void powerOff() {
System.out.println("Power off.");
}
}
// child class
public class SmartPhone extends Phone {
String wifi;
SmartPhone(String model, String color, String wifi) {
this.model = model; // from parent class
this.color = color; // from parent class
this.wifi = wifi;
}
void connect_wifi(String wifi) {
System.out.println("Connecting to " + wifi);
}
}
// 자식 클래스(child class) 테스트
public class Main {
public static void main(String[] args) {
SmartPhone sm = new SmartPhone("Galaxy S10", "White", "KT");
// Phone으로부터 상속받은 필드와 메소드(from 부모)
System.out.println(sm.model);
System.out.println(sm.color);
sm.powerOn();
sm.powerOff();
// SmartPhone에서 추가한 필드와 메소드(자식)
System.out.println(sm.wifi);
sm.connect_wifi("KT");
}
}
2.부모 생성자 호출(Super Constructor)
- 자바에서는 자식 객체를 생성하면, 먼저 부모 객체가 생성되고 그 다음에 자식 객체가 생성된다.
- 모든 객체는 클래스의 생성자(Constructor)를 호출해야만 생성된다.
- 부모 생성자는 자식 생성자의 맨 첫 줄에서 호출된다.
- 생성자가 명시적으로 선언되지 않으면 컴파일러가 아래와 같이 기본 생성자를 만든다.
SmartPhone { // 자식 생성자
super(); // 부모의 기본 생성자 호출
}
- 생성자가 미리 코딩되어 있지않다면 컴파일러에 의해 기본 생성자가 만들어지므로 문제없이 실행된다.
- 직접 자식 생성자를 선언하고 명시적으로 부모 생성자를 호출하려면 아래와 같이 코딩한다.
// parent class
public class Phone {
String model;
String color;
public Phone(String model, String color) {
this.model = model;
this.color = color;
}
}
// child class
public class SmartPhone extends Phone {
String wifi;
public SmartPhone(String model, String color, String wifi) {
super(model, color); // 부모 생성자 호출
this.wifi = wifi;
}
}
// 자식 클래스(child class) 테스트
public class Main {
public static void main(String[] args) {
SmartPhone sm = new SmartPhone("Galaxy S10", "White", "KT");
// 부모에게서 상속받은 필드 출력
System.out.println(sm.model);
System.out.println(sm.color);
// 자식에게서 추가한 필드 출력
System.out.println(sm.wifi);
}
}
- super(매개변수, ....)는 매개변수의 타입과 일치하는 부모 생성자를 호출한다.
- 만약 매개변수의 타입과 일치하는 부모 생성자가 없으면 컴파일 오류가 발생한다.
- super(매개변수,...)가 생략되면 컴파일러에 의해 자동적으로 super()가 추가되기 때문에 부모의 기본 생성자가 미리 존재해야 한다.
- 부모 클래스에 기본 생성자가 없고, 매개 변수가 있는 생성자만 있다면 자식 생성자에서 반드시 부모 생성자 호출을 위해 super(매개변수,...)를 명시적으로 호출해야 한다.
- super(매개변수,...)는 반드시 자식 생성자의 첫 줄에 위치해야 한다.(그렇지 않으면 컴파일 에러가 난다.)
- 바로 위 자식 클래스 코드에서, spuer(model, color) 가 없으면 부모의 기본 생성자가 없으니 다른 생성자를 명시적으로 호출하라는 에러가 발생한다.
728x90
반응형
'자바(Java) > 자바 클래스' 카테고리의 다른 글
[Java Class.08] 메소드 오버라이드(@Override) (0) | 2024.02.25 |
---|---|
[Java Class.07] 다형성(Polymorphism) (0) | 2024.02.23 |
[Java Class.05] Singleton & Final(싱글톤&파이널) (0) | 2024.02.23 |
[Java Class.04] Member of Instance & Static (0) | 2024.02.23 |
[Java Class.03] 메소드(Method) (0) | 2024.02.18 |
댓글