부모 클래스의 private 접근 제한을 갖는 필드 및 메소드는 자식이 물려받을 수 없음
부모와 자식 클래스가 서로 다른 패키지에 있다면, 부모의 default 접근 제한을 갖는 필드 및 메소드도 자식이 물려받을 수 없음 (default 접근 제한은 ‘같은 패키지에 있는 클래스’만 접근이 가능하게끔 하는 접근 제한자이기 때문입니다.)
그 이외의 경우 모두 상속이 가능
public Class Parent{ .... }; // 부모 클래스
public Class Child extends parent { .... }; // 자식 클래스
//Same package
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();
}
ChildBook 클래스가 ParentBook의 필드와 메소드를 상속받음. ChildBook 클래스 내에 따로 필드나 메소드가 선언되어 있지 않았는데도, 생성자의 this.name 선언이나, main 메소드의 Child.Print() 가 컴파일 에러가 나지 않는다.
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();
}