상속(Inheritance)이란?

정의
 부모의 모든 것을 자식에게 상속하는 것 ( == 사용할 수 있게 하는 것)

형식
 클래스 자식 클래스명 extends 부모 클래스명
         ex) class Strawberry extends Fruit 

참조
 상속 관계에선 Overriding을 할 수 있다.

 

 

오버라이딩(overriding)이란 ? : 덮어쓴다.

정의
 상속받은 조상의 메서드를 자신에 맞게 변경하는 것

 

참조
 선언부 변경불가. 내용만 변경가능

조건
 1. 선언부가 조상 클래스의 메서드와 일치해야 한다.
   : 선언부(반환타입, 메서드이름, 매개변수 목록)
 2. 접근제어자를 조상 클래스의 메서드보다 좁은 범위로 변경할 수 없다.
 3. 예외는 조상 클래스의 메서드보다 많이 선언할 수 없다.

예시

class Fruit { // 부모class 생성
	String name;
	Fruit(String name){
		super(); // 생략된 것 (부모는 Object)
		this.name = name;
	}
	void color() {
		System.out.println(" 노란색");
	}
	void p(String str) {
		System.out.print(str);
	}
	void pln(String str) {
		System.out.println(str);
	}
}

class Strawberry extends Fruit { // 자식class 생성
	int count;
	Strawberry(String name, int count){
		super("딸기");
		this.count = count;
	}
	void color() { // 부모메소드 오버라이딩
		System.out.print(" 빨간색");
	}
	void action() {
		System.out.println("이다.");
	}
}
public class User {

	public static void main(String[] args) {
		Fruit f = new Fruit("바나나");
		f.p(f.name+"는");
		f.color();
		
		Strawberry s = new Strawberry("딸기", 10);
		s.p(s.name+"는");
		s.color(); 
		s.action(); 
		s.pln(s.count+"개 정도 먹고싶다.");
		
		Fruit f3 = new  Strawberry("바나나", 12); // 다형성
		
		Fruit f1 = s; // 부모 -> 자식 (자동형변환)
		f1.p(f1.name+"는 ");
		f1.color();  
	/*  f1.action(); 
		f1.pln(f1.count+"개 정도 먹고싶다."); */
		f.pln("");
		
		Strawberry s1 = (Strawberry) f1; // 자식 -> 부모 (강제형변환) 다 쓸 수 있다.
		s1.p(s1.name+"는");
		s1.color(); 
		s1.action(); 
		s1.pln(s1.count+"개 정도 먹고싶다.");
		
	/*	Strawberry s2 = (Strawberry) f; // 잘못된 강제형변환	ClassCastException (원래 부모인데 자식에 끼어맞추면 깨져버린다.)
		s2.p(s.name+"는");								RunTimeError (컴파일은 되는데 실행이 안된다.)
		s2.color(); 
		s2.action(); 
		s2.pln(s.count+"개 정도 먹고싶다."); */
	}
}

 

참조
 형변환은 상속관계에서만 가능하다.
  자동형변환( 자식 → 부모 ) → 묵시적
    : overroding유지, 부모 객체만 호출 가능.
  강제형변환( 부모 → 자식 ) → 명시적
    : overroding유지, 자식 객체 호출 가능.
  잘못된 강제 형 변환은 RuntimeException를 발생시킨다. 컴파일은 가능, 실행 불가.


실행화면

바나나는 노란색
딸기는 빨간색이다.
10개 정도 먹고싶다.
딸기는  빨간색
딸기는 빨간색이다.
10개 정도 먹고싶다.

+ Recent posts