-
메소드 재정의 - @Override, super자바 Java/문법 - 객체 지향 2022. 1. 15. 00:05
1. @Override
부모 클래스의 상속 메소드를 수정하여 자식 클래스에서 재정의 할 때
부모 클래스와 동일한 시그니처(public void ..)를 가졌는지 검사
접근제한을 더 느슨하게 수정할 수 있지만 더 강하게는 하지 못한다
public -> private (x)
defalut -> public (o)
정확한 메소드의 재정의를 위해 사용
<Calculator.java>
public class Calculator { double calcCircleArea(double r) { System.out.println("Calculator 객체의 calcCircleArea 메소드 실행"); return 3.141592 * r * r; } }
<CalcComputer.java>
public class CalcComputer extends Calculator { @Override double calcCircleArea(double r) { System.out.println("CalcComputer 객체의 clacCircleArea 메소드 실행"); return Math.PI * r * r; } }
<CalculatorMain.java>
public class CalcMain { public static void main(String[] args) { int r = 10; Calculator calc = new Calculator(); System.out.println("원의 면적: " + calc.calcCircleArea(r)); CalcComputer calcCom = new CalcComputer(); System.out.println("원의 면적: " + calcCom.calcCircleArea(r)); } }
Calculator 객체의 calcCircleArea 메소드 실행
원의 면적: 314.1592
CalcComputer 객체의 clacCircleArea 메소드 실행
원의 면적: 314.15926535897932. super - 부모 메소드 사용
<Airplane.java>
public class Airplane { public void land () { System.out.println("착륙"); } public void fly() { System.out.println("비행"); } public void takeOff() { System.out.println("이륙"); } }
<AirplaneSupersonic.java>
public class AirplaneSupersonic extends Airplane { public static final int NORMAL = 1; public static final int SUPERSONIC = 2; public int flyMode = NORMAL; @Override public void fly() { if(flyMode == SUPERSONIC) { System.out.println("초음속 비행 중"); } else { super.fly(); // 부모클래스(Airplane)의 fly메소드 호출 } } }
<AirplaneMain.java>
public class AirplaneMain { public static void main(String[] args) { AirplaneSupersonic superA1 = new AirplaneSupersonic(); superA1.takeOff(); // 이륙 superA1.fly(); // 비행 superA1.flyMode = AirplaneSupersonic.SUPERSONIC;// 초음속 비행 중 superA1.fly(); // 초음속 비행 중 superA1.flyMode = AirplaneSupersonic.NORMAL; superA1.fly(); // 비행 superA1.land(); // 착륙 } }
'자바 Java > 문법 - 객체 지향' 카테고리의 다른 글
상속 - 부모 생성자 호출(super) (0) 2022.01.14 상속 - 기본 (0) 2022.01.07 싱글톤(Singleton Pattern) - 객체를 하나만 생성 (0) 2022.01.05 메소드 오버로딩 (0) 2022.01.04