본문 바로가기
Programming/Java

자바 상속과 오버라이딩

by hyunipad 2021. 1. 6.
반응형

상속이란 무엇일까요?

부모님에게 상속을 받으면 부모님이 가지고 있는 것의 모든 것들을 물려받을 수 있습니다.

자바에서의 상속은 기존 클래스의 변수나 메서드를 다른 클래스에서 재사용하기 위함입니다.

상속에서 물려주는 클래스를 조상 클래스, 부모 클래스, 상위 클래스, 슈퍼 클래스라고 부르고 상속받는 클래스를 자식 클래스, 자손 클래스, 하위 클래스, 서브 클래스라고 합니다.

 

상속의 기본 문법과 코드 예시


class 서브클래스 extends 슈퍼클래스

 

상속의 기본문법은 위와 같습니다.

슈퍼클래스의 멤버변수나 메서드들을 서브클래스에서 그대로 사용할 수 있습니다.

package hyuni;

public class Inheritance {

	public static void main(String[] args) {
		나 a = new 나();
		
		a.Draw();
		a.Sing();
		a.Game();
	}

}

class 할아버지 {
	public void Draw() {
		System.out.println("그림을 잘 그린다.");
	}
}

class 아버지 extends 할아버지 {
	public void Sing() {
		System.out.println("노래를 잘 부른다.");
	}
}

class 나 extends 아버지 {
	public void Game() {
		System.out.println("게임을 잘한다.");
	}
}

 

메소드 오버 라이딩(Method Overriding) = 메서드 재정의


만약 부모에게 차를 물려받았다고 친다면 물려받은 부모의 차를 새롭게 튜닝을 하거나 엔진을 교체할 수 있습니다.

프로그래밍에서도 마찬가지로 부모클래스를 상속받아 사용하다가 상속받은 부모 클래스의 메서드를 더 좋은 동작으로 처리하기 위해 적합하게 수정해서 재정의 하는것을 메서드 오버라이딩 이라고 합니다.

부모클래스의 메서드와 동일하게 생긴 메서드를 정의하므로, 자식 클래스에서는 더 이상 부모 클래스의 메서드는

보이지 않고 오버 라이딩한 자신의 메서드만 보입니다.(부모 클래스의 메서드는 은닉됨)

<오버 라이딩 규칙>

  • 상속 관계 필수
  • 메서드명,, 파라미터가 일치해야 한다.
  • 리턴 타입은 상속관계에 있는 서브클래스의 타입으로 변경은 가능함.
  • 접근 제한자는 같거나 넓은 범위로만 변경 가능하다.(접근 제한자 범위 private < protected < default < public)
  • static, final, private 제한자가 지정된 메서드는 오버 라이딩이 불가능하다.

 

메소드 오버라이딩 예시


package hyuni;

public class OverridingEx {

	public static void main(String[] args) {
		고양이 고양이 = new 고양이();
		
		고양이. 동물울음소리();
		
		강아지 강아지 = new 강아지();
		
		강아지.동물울음소리();
	}

}

class 동물 { // 슈퍼 클래스 동물
	public void 동물울음소리() { // 동물 클래스에서 정의한 울음소리 메소드
		System.out.println("동물은 울음소리를 낸다.");
	}
}

class 고양이 extends 동물 { // 동물을 상속받은 고양이 클래스

	@Override
	public void 동물울음소리() { // 울음소리를 상속 받아 재정의 하여 사용
		System.out.println("고양이는 야옹 !");
	}
	
}

class 강아지 extends 동물 {

	@Override
	public void 동물울음소리() {
		System.out.println("강아는 멍멍 ! ");
	}

}

위의 코드에서 부모에게 상속받은 울음소리 메서드를 호출 하였지만 메소드 오버 라이딩하여 실행 결과를 보게 되면

"동물은 울음소리를 낸다." 이 호출되지 않고 "고양이는 야옹!", "강아지는 멍멍! "이 실행된 것을 확인할 수 있습니다.

반응형

댓글