public class ParentBook{
String name; //필드
int price;
public void Print(){ // 메소드
System.out.println("책의 이름과 가격 : "+name+" "+price);
}
public class ChildBook extends ParentBook{
ChildBook (String name, int price){ // 생성자
this.name = name; // ChildBook이 ParetBook의 필드를 상속받아서 가능한 선언
this.price = price; // "
}
public static void main (String[] args){
ChildBook Child = new ChildBook("나의 라임오렌지 나무", 10000);
System.out.print("[구현 결과 1] ");
Child.Print();
}
ParentBook 이라는 부모 클래스가 있고 ChildBook라는 자식클래스가 상속받아서 생성자의 name하고 price는 부모클래스에서 상속받아 사용한다.
public class ParentBook{
String name; //필드
int price;
public ParentBook (String name, int price){ // 부모의 생성자가 있는 경우
this.name = name;
this.price = price;
}
public void Print(){ // 메소드
System.out.println("책의 이름과 가격 : "+name+" "+price);
}
public class ChildBook extends ParentBook{
ChildBook (){ // 자식 생성자
super("나의 라임오렌지 나무", 10000); // 반드시 자식 생성자 첫줄에 선언
}
public static void main (String[] args){
ChildBook Child = new ChildBook();
System.out.print("[구현 결과 2] : ");
Child.Print();
}
만일 부모에게 매개변수를 포함한 명시적 생성자 선언이 있었는데, 자식 생성자에서 super 를 통하여 호출해주지 않았을 경우 컴파일 에러가 납니다.
또한, 앞에서도 말했다시피 반드시 자식 생성자 내부의 첫 줄에 super(…..); 를 써야만 컴파일 에러가 나지 않습니다.
public class Airplane {
public void land() {
System.out.println("착륙합니다");
}
public void fly() {
System.out.println("일반비행합니다");
}
public void takeOff() {
System.out.println("이륙합니다");
}
}
public class SupersonicAirplane extends Airplane{
public static final int NORMAL = 1;
public static final int SUPERSONIC = 2;
public int flyMode = NORMAL;
@Override
public void fly() {
if (flyMode == SUPERSONIC) System.out.println("초음속비행합니다");
else super.fly();
}
public static void main(String[] args) {
SupersonicAirplane sa = new SupersonicAirplane();
sa.takeOff();
sa.fly();
sa.flyMode = SupersonicAirplane.SUPERSONIC;
sa.fly();
sa.land();
}
}