상속이란?
새로운 클래스를 정의할때 이미 구현된 클래스를 상속받아서 속성 및 기능을 확장되는 클래스를 구현하는것
상위클래스 A 하위클래스 B
ex) class A extend B 로 사용하면 A를 B클래스에 상속받는 것
메인 클래스
package sutdy.java.ex12_extend;
public class MainClass {
public static void main(String[] args) {
ChildClass cc = new ChildClass();
System.out.println(cc.cstr);
ParentsClass pc = new ParentsClass();
System.out.println(pc.pstr);
System.out.println(cc.getPapaName());
System.out.println(cc.getMamaName());
}
}
package sutdy.java.ex12_extend;
public class ChildClass extends ParentsClass {
public String cstr = "자식클래스";
}
package sutdy.java.ex12_extend;
public class ParentsClass {
public String pstr = "부모클래스";
public String getPapaName() {
System.out.println("조윤후");
return "";
}
public String getMamaName () {
System.out.println("백진주");
return "";
}
}
결과값
@Override
상속에서 나온개념으로써 상위클래스에서 선언된걸 하위클래스에서 재정의 하는것.
상위클래스에 있는 메서드명 및 매개변수 타입 갯수 까지같아야 한다.
ex ) 본사의 메뉴 및 가격이 정해져 있다. 이것을 각 동네마다 가격을 재정의 한다.
본사 클래스
package sutdy.java.ex12_extend_2_Override;
public class HeadBunSa {
public void kimchiWlro() {
System.out.println("김치찌개 가격은 5000원입니다.");
}
public void budeaWlro() {
System.out.println("부대찌개 가격은 6000원입니다.");
}
public void bibimBab() {
System.out.println("비빔밥 가격은 6000원입니다.");
}
public void sundaeKook() {
System.out.println("순대국 가격은 5000원입니다.");
}
public void gonggiBab() {
System.out.println("공기밥 가격은 1000원입니다.");
}
}
주택가 클래스
package sutdy.java.ex12_extend_2_Override;
public class Housing extends HeadBunSa{
@Override
public void kimchiWlro () {
System.out.println("주택가 김치찌개 가격은 4500원 입니다.");
}
@Override
public void budeaWlro () {
System.out.println("주택가 부대찌개 가격은 5000원 입니다.");
}
@Override
public void sundaeKook() {
System.out.println("주택가 순대국은 판매하지 않습니다.");
}
}
대학가 클래스
package sutdy.java.ex12_extend_2_Override;
public class University extends HeadBunSa{
@Override
public void budeaWlro() {
System.out.println("대학교 부대찌개 가격은 5000원입니다.");
}
@Override
public void bibimBab() {
System.out.println("대학교 비빔밥 가격은 5000원입니다.");
}
@Override
public void sundaeKook() {
System.out.println("대학교 순대국 가격은 4000원입니다.");
}
@Override
public void gonggiBab() {
System.out.println("대학교 공기밥 가격은 무료입니다.");
}
}
증권가 클래스
package sutdy.java.ex12_extend_2_Override;
public class Stock extends HeadBunSa{
@Override
public void kimchiWlro() {
System.out.println("증권가 김치찌개 가격은 6000원입니다.");
}
@Override
public void budeaWlro() {
System.out.println("증권가 부대찌개 가격은 7000원입니다.");
}
@Override
public void bibimBab() {
System.out.println("증권가 비빔밥 가격은 7000원입니다.");
}
@Override
public void sundaeKook() {
System.out.println("증권가 순대국 가격은 6000원입니다.");
}
}
호출 메서드
package sutdy.java.ex12_extend_2_Override;
public class BunSaMainClass {
public static void main(String[] args) {
System.out.println("본사의 메뉴및 가격은 ?");
HeadBunSa hs = new HeadBunSa();
hs.bibimBab();
hs.budeaWlro();
hs.kimchiWlro();
hs.sundaeKook();
hs.gonggiBab();
System.out.println("========================");
System.out.println("주택가의 메뉴 및 가격은?");
HeadBunSa Hg = new Housing();
Hg.bibimBab();
Hg.budeaWlro();
Hg.kimchiWlro();
Hg.sundaeKook();
Hg.gonggiBab();
System.out.println("========================");
System.out.println("대학가의 메뉴 및 가격은?");
HeadBunSa ut = new University();
ut.bibimBab();
ut.budeaWlro();
ut.kimchiWlro();
ut.sundaeKook();
ut.gonggiBab();
System.out.println("========================");
System.out.println("대학가의 메뉴 및 가격은?");
HeadBunSa sk = new Stock();
sk.bibimBab();
sk.budeaWlro();
sk.kimchiWlro();
sk.sundaeKook();
sk.gonggiBab();
System.out.println("========================");
}
}
@결과값
위 메인클래스에서 보다 싶이 각 상송받은 클래스는 생성자를 만들때 앞에는 부모클래스를 쓰고 뒤에는 자식클래스를 쓸경우 자식클래스에 있는 메서드를 호출할수 잇다.
위 예제에서 대학가의 메뉴 부분에 재정의된 김치찌개 메서드가 없는데 이와같은 경우에는 상속받은 부모클래스에 있는 김치찌개 메뉴가 호출이 된다.
@ super 키워드
super 키워드는 @Override가 된 메서드의 단점인 자식클래스에서 부모클래스에 있는 메서드를 override 하면 부모클래스에 메서드를 사용할수 없는데 사용할수 있게 해주는것이 super메서드이다.
ex ) 자식메서드에서 super.부모메서드명(); 을 사용하면 된다.
package sutdy.java.ex12_extend_3_super;
public class MainClass {
public static void main(String[] args) {
ChildClass cc = new ChildClass();
cc.method1();
}
}
package sutdy.java.ex12_extend_3_super;
public class ParentClass {
public void method1() {
System.out.println("ParentClass Method1 입니다.");
}
public void method2() {
System.out.println("ParentClass Method2 입니다.");
}
}
package sutdy.java.ex12_extend_3_super;
public class ChildClass extends ParentClass{
@Override
public void method1() {
// TODO Auto-generated method stub
super.method1();
System.out.println("ChildClass method1() 입니다.");
}
}
@결과값
위 ChildClass에 있는 method1()을 호출했을때 super.method1(); 이 실행되는데 이것은 상속받은 ParentClass에 있는 메서드 method1() 호출하고 그 뒤 콘솔을 출력한다. 이와같이 super키워드는 부모클래스에 있는 메서드를 호출 후 자식클래스에서 재정의 된 메서드를 사용할 수 있게 해준다.