만약 상위 클래스의 내용을 바꿔서 하위 클래스가 사용하고 싶다면?
상위 클래스의 메소드를 바꾸면? 다른 클래스도 영향을 받아; 문제가 생기면 하나하나 뜯어봐야해..
그렇다고 상위 클래스를 새로 만들어? 메소드 하나 바꾸자고..?
그래서 메소드를 살짝 수정 할 수 있게 해놨음. (오버라이딩이라고 함)
// 상위 클래스
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 |
Uploaded by Notion2Tistory v1.1.0