ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 메소드 재정의 - @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.1592653589793

     

    2. 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(); // 착륙
    		
    	}
    
    }
Designed by Tistory.