728x90
메소드 재정의
상속된 메소드의 내용이 자식 클래스에 맞지않을 경우, 자식 클래스에서 동일한 메소드를 재정의하는 것을 말한다.
접근제한을 더 강하게 오버라이딩 불가
접근제한을 더 강하게 오버라이딩 할 수 없다는 것은 부모메소드가 public 접근 제한을 가지고 있을 경우
오버라이딩 하는 자식 메소드는 default 나 private 접근 제한으로 수정할 수 없다는 뜻이다.
부모클래스 ↓
public class Calaculator {
double areaCircle(double r){
System.out.println("Calculator 객체의 areaCircle() 실행");
return 3.14159 * r * r;
}
}
자식클래스 ↓
public class Computer extends Calaculator{
//areaCircle()메소드가 정확히 오버라이딩된것인지 컴파일러가 정확히 체크 @Override
@Override
double areaCircle(double r){
System.out.println("Computer 객체의 areaCircle() 실행");
//Math는 내장메소드로 클릭해서 확인 가능
return Math.PI * r * r;
}
}
이미지 출처 : 이것이자바다
@override 어노테이션은 생략해도 좋으나, 이것을 붙여주게 되면 areaCircle() 메소드가 정확히 오버라이딩 된 것인지 컴파일러가 체크하기 때문에, 개발자의 실수를 줄여준다.
메소드오버라이딩 테스트 - 출력
public class ComputerExample {
public static void main(String[] args){
int r = 10;
//인스턴스생성
Calaculator calaculator = new Calaculator();
System.out.println("원면적:" +calaculator.areaCircle(r));
System.out.println();
Computer computer = new Computer();
System.out.println("원면적:" +computer.areaCircle(r));
//제정의된 호출
}
}
자식클래스에서 부모클래스의 메소드를 오버라이딩 하게되면, 부모 클래스의 메소드는 숨겨지고
오버라이딩 된 자식 메소드만 사용하게 된다.
그러나 자식 클래스 내부에서 오버라이딩된 부모 클래스의
메소드를 호출해야하는 상황이 발생한다면
명시적으로 super키워드를 붙여 부모 메소드를 호출할수있다.
super은 부모객체를 참고하고 있기 때문에 부모메소드에 직접 접근할수있다.
super.부모메소드();
부모 ↓
public class Airplane {
public void land(){
System.out.println("착륙합니다");
}
public void fly(){
System.out.println("일반비행합니다");
}
public void takeOff(){
System.out.println("이륙합니다");
}
}
상속 (자식) ↓
public class SupersonicAirplane extends Airplane{
public static final int NOMAL = 1;
public static final int SUPERSONIC = 2;
public int flyMode = NOMAL;
@Override
public void fly() {
if(flyMode == SUPERSONIC){
System.out.println("초음속비행합니다.");
} else {
//Airplane 객체의 fly() 메소드 호출
super.fly();
}
}
}
출력 ↓
public class SupersonicAirplaneExam {
public static void main(String[] args){
SupersonicAirplane sa = new SupersonicAirplane();
sa.takeOff();
sa.fly();
sa.flyMode = SupersonicAirplane.SUPERSONIC;
sa.fly();
sa.flyMode = SupersonicAirplane.NOMAL;
sa.fly();
sa.land();
}
}
이미지 출처 : 이것이자바다
728x90
'STUDY > JAVA' 카테고리의 다른 글
[JAVA] 22-06-28 final / protected 접근제한자 ☑ (0) | 2022.06.28 |
---|---|
[JAVA] 메소드 재정의, 상속 등을 이용해 게임 만들기 (0) | 2022.06.27 |
[JAVA] 22-06-24 상속(Inheritance) ☑ (0) | 2022.06.24 |
[JAVA] 22-06-23 어노테이션(Annotation) ☑ (0) | 2022.06.23 |
[JAVA] 슬라임 게임 만들기 (0) | 2022.06.21 |