본문 바로가기

Java

상속 : 메소드 재정의(오버라이딩)

만약 상위 클래스의 내용을 바꿔서 하위 클래스가 사용하고 싶다면?

상위 클래스의 메소드를 바꾸면? 다른 클래스도 영향을 받아; 문제가 생기면 하나하나 뜯어봐야해..

그렇다고 상위 클래스를 새로 만들어? 메소드 하나 바꾸자고..?

그래서 메소드를 살짝 수정 할 수 있게 해놨음. (오버라이딩이라고 함)

// 상위 클래스
public class Calculator{
	double areaCircle(double r){
		System.out.println("Calculator 객체의 areaCircle() 실행");
		return 3.14159 * r * r;
	}
}
// Caclulator상속한 하위 클래스
public class Computer extends Cacluator{
	@override //생략 가능하나.. 개발자 실수를 줄이기 위해 써주셈
	double areaCircle(double r){
		Sytstem.out.println("Computer 객체의 areaCircle() 실행");
		return Math.PI * r * r;
	}
}

사용

public class ComputerExample{
	public static void main(String[] args){
		int r =10;
		Caculator calculator = new Caclulator();
		System.out.println("원 면적:"+ calculattor.areaCircle(r)); //-> 314.159

		Computer computer = new Computer();
		System.out.println("원 면적:"+ computer.areaCirlce(r)); //-> 314.1592653589793
		//재정의 된 메소드 호출
	}
}

오버라이딩 규칙

-부모의 메소드와 동일한 형태(리턴 타입, 메소드 이름, 매개 변수 리스트)를 가져와야한다.

-접근 제한을 더 강하게 오버라이딩 할 수 없다. (상위클래스가 public인데, 오버라이딩 한 거 default나 private 할 수 없음: 더 비밀스럽게x)

-새로운 예외를 throws할 수없다.

상위 메소드 호출(super)

만약 오버라이딩 했는데 원래 상위 클래스의 오버라이딩 안 한 메소드를 쓰고 싶다면?

super.상위메소드();

class People{
	void method1() {...}
	void method2() {...}
}
class Student{
	@Override
	void method2(){..} //override
	void method3(){
	method2();// 오버라이딩 된(재정의 된) 메소드 호출
	super.method2(); // 상위 클래스의 메소드 호출
	}
}
반응형

'Java' 카테고리의 다른 글

상속 : Protected 접근 제한자  (0) 2021.03.07
상속 : final 클래스와 final 메소드  (0) 2021.03.07
상속 : 상속의 개념  (0) 2021.03.07
참조타입  (0) 2021.03.04
변수와 타입  (0) 2021.02.08