상속

조윤후·2021년 6월 29일
0

상속이란?

새로운 클래스를 정의할때 이미 구현된 클래스를 상속받아서 속성 및 기능을 확장되는 클래스를 구현하는것

상위클래스 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키워드는 부모클래스에 있는 메서드를 호출 후 자식클래스에서 재정의 된 메서드를 사용할 수 있게 해준다.

profile
공부하며 예제풀이 정리

0개의 댓글

관련 채용 정보