기존의 클래스를 사용하여 새로운 클래스를 만드는 것이다.
상위 클래스를 보통 부모클래스라고도 하며 하위 클래스는 자식클래스 라고 부른다.
자식클래스는 부모클래스의 멤버를 모두 상속받으며 자식의 멤버개수는 부모보다 많다.
자식클래스가 부모클래스를 상속할 때 extends를 써줘야함
부모클래스의 private을 갖는 필드 혹은 메소드는 자식이 물려받을 수 xx
멤버를 부를 때 먼저 같은 클래스에서 찾아보고 없으면 부모클래스에서 찾아서 출력됨
상속받고 생성자 생성 시 this.() , super()사용!!
상속받을 때 생성자는 따로 추가할거 없으면 생략되는데 이때 super도 같이 생략됨!!
class Parents{
}
class Child extends Parents{
}
class Grandparents {
}
class Parents extends Grandparents {
}
class Child extends Parents {
}
class Father {
}
class YoungBro extends Father {
}
class OldBro extends Father {
}
public class GrandFa{
private int nai = 80;
public String gabo="자동차";
public GrandFa(){
System.out.println("할아버지 생성자");
}
public int getNai() {
return nai;
}
}
public class Father extends GrandFa{
private int nai = 55;
final public String gabo = "액자";
public Father(){
System.out.println("아버지 생성자");
}
public int getNai() {
return nai;
//return this.nai();
}
public void showData(){
String gabo="항아리";
System.out.println(gabo);
System.out.println(this.gabo);
System.out.println(super.gabo);
System.out.println(getNai());
System.out.println(this.getNai());
System.out.println(super.getNai());
}
}
public class Father extends Horange{
public Horange(){
System.out.println("호랭이 생성자");
}
}
public class Family{
public static void main(String[] args) {
GrandFa grandfa = new GrandFa();
System.out.println("가보:"+grandfa.gabo);
System.out.println("할아버지 나이 : "+grandfa.getNai());
Father father = new Father();
System.out.println("가보 : "+father.gabo);
System.out.println("나이 : "+father.getNai());
father.showData();
Horange horang= new Horange();
System.out.println("가보 :"+horang.gabo);
System.out.println("나이 :"+horang.getNai());
horang.showData();
}
}
위의 Family 클래스의 코드들이 실행되면
GrandFa 에서는
할아버지 생성자
가보 : 자동차
할아버지 나이 : 80
Father 에서는
아버지 생성자
가보 : 액자
나이 : 55
father.showData()는 항아리, 액자, 자동차, 55, 55, 80 순으로 출력된다.
Horange 에서는
호랭이 생성자
가보 : 액자
나이 : 55
horang.showData()는 항아리, 액자, 자동차, 55, 55, 80 순으로 출력된다.
System.out.println(gabo); // 같은 지역인 항아리 출력
System.out.println(this.gabo); // this.이니 현재 클래스의 멤버를 부르므로 액자가 나옴
System.out.println(super.gabo); // super.이니 할아버지를 불러 자동차가 나옴
부모와 똑같은 메소드를 자신에게 맞혀주면 부모것은 자식에게 묻힌다. : method override(매소드 재정의)
protected는 다른 패키지에서 자식 클래스에서만 public(default와 public의 중간) (패키지가 다를땐 public 사용) (같은 패키지에서만 private)