본문 바로가기

Java

오버라이드 ( Override )

오버라이드 ( Override ) 란?

오버라이드란 상속 관계에서 부모 클래스에 정의된 메서드를 자식 클래스에서 재정의(다시 정의)하는 것을 말한다. 즉, 자식 클래스에서 부모 클래스의 메서드를 새로운 내용으로 구현하는 것이다. 이렇게 하면 자식 클래스는 부모 클래스의 메서드를 덮어쓰게 되므로, 부모 클래스의 메서드 대신에 자식 클래스에서 정의한 메서드가 호출된다.

package basic.ch17;

public class Cal {

	public Cal() {
		System.out.println("Cal() 부모 생성자 호출");
	}

	public int sum(int n1, int n2) {
		return n1 + n2;
	}

	public int multiply(int n1, int n2) {
		System.out.println("2. 호출");
		System.out.println("여기는 부모 클래스 메서드 입니다.");
		return n1 * n2;
	}

	// 코드 테스트
	public static void main(String[] args) {

		Cal2 cal2 = new Cal2();
		System.out.println(cal2.sum(5, 3));
		System.out.println(cal2.minus(10, 3));
		System.out.println(cal2.multiply(10, 0));

	}// end of main

}

class Cal2 extends Cal {

	public Cal2() {
		System.out.println("Cal2 자식 생성자 호출");
	}

	public int minus(int n1, int n2) {
		return n1 - n2;
	}

	// 부모 코드의 기능을 변경하고 싶다면 -> 재정의하고 싶다면
	// 오버라이드 처리 한다.
//	public int multiply(int n1, int n2) {
//		// a 또는 b -> 논리 연산자 -> 논리합 -> 둘 중에 하나라도 true 라면 true
//		// a 그리고 b -> 논리 연산자 -> 논리곱 -> 전부 true 여야 true
//		if(n1 == 0 || n2 == 0) {
//			System.out.println("0을 입력하지 마시오.");
//		}
//		return n1 * n2;
//	}

	@Override // <- 애노티이션, 어노테이션 -> 주석 + 힌트
	public int multiply(int n1, int n2) {
		System.out.println("1. 호출");
		return super.multiply(n1, n2);
	}

}

부모 객체 클래스가 먼저 존재해야 자식 클래스가 생성 될 수 있다.

super. <- 부모 객체를 가리킨다.


연습 문제

그림을 보고 상속하기

package basic.ch17;

public class Hero {

	String name;
	int hp;

	public Hero(String name, int hp) {
		this.name = name;
		this.hp = hp;
	}

	void attack() {
		
	}

}
package basic.ch17;

public class Warrior extends Hero{
	
	public Warrior(String name, int hp) {
		super(name, hp);
	}
	
	// 오버라이드
	@Override
	void attack() {
		System.out.println("전사가 기본 공격을 합니다.");
	}
	
	void comboAttack() {
		System.out.println("콤보 어택");
	}

}
package basic.ch17;

public class Archer extends Hero{

	public Archer(String name, int hp) {
		super(name, hp);
	}
	
	@Override
	void attack() {
		System.out.println("궁수가 공격을 합니다.");
	}
	
	void fireArrow() {
		System.out.println(super.name + "불 화살 공격을 합니다.");
	}

}
package basic.ch17;

public class Wizard extends Hero {

	public Wizard(String name, int hp) {
		super(name, hp);
	}
	
	@Override
	void attack() {
		System.out.println("마법사가 공격을 합니다.");
	}
	
	void freezing() {
		System.out.println("얼리기");
	}
	
}

 

728x90

'Java' 카테고리의 다른 글

연관 관계 ( Association )란?  (1) 2024.04.23
Composition ( 포함 관계 )  (0) 2024.04.23
상속 ( Inheritance )  (1) 2024.04.23
메서드 오버로딩 ( Overloading )  (0) 2024.04.23
배열 ( Array )  (0) 2024.04.22