final로 선언하여 하위 클래스에서 재정의 할 수 없게 함
Car.java
package ch10; public abstract class Car { public abstract void drive(); public abstract void stop(); public abstract void wiper(); public void startCar() { System.out.println("시동을 켭니다."); } public void turnOff() { System.out.println("시동을 끕니다."); } // 추상 메서드 아님 => 구현 내용만 없을 뿐 일반 메서드임 public void washCar() { } // 상속 받는 자식 클래스에서 해당 메서드를 재정의 할 수 없도록 final 키워드를 붙여준다. final public void run() { startCar(); drive(); wiper(); stop(); turnOff(); washCar(); } }
AICar.java
package ch10; public class AICar extends Car { @Override public void drive() { System.out.println("자울 주행을 합니다."); System.out.println("자동차가 스스로 방향을 바꿉니다."); } @Override public void stop() { System.out.println("장애를 알아서 스스로 멈춥니다."); } @Override public void wiper() { // TODO Auto-generated method stub } @Override public void washCar() { System.out.println("자동차를 세차 합니다."); } }
ManualCar.java
package ch10; public class ManualCar extends Car { @Override public void drive() { System.out.println("사람이 운전합니다."); System.out.println("사람이 핸들을 조작합니다."); } @Override public void stop() { System.out.println("장애를 알아서 브레이크를 밟아서 정지합니다."); } @Override public void wiper() { } }
CarTest.java
package ch10; public class CarTest { public static void main(String[] args) { Car aiCar = new AICar(); aiCar.run(); System.out.println("============================"); Car mCar = new ManualCar(); mCar.run(); } }
출력 결과
final 변수 : 값이 변경될 수 없는 상수public static final double PI = 3.14;final 메서드 : 하위 클래스에서 재정의 할 수 없는 메서드final 클래스 : 상속할 수 없는 클래스Define.java
public class Define { public static final int MIN = 1; public static final int MAX = 999999; public static final double PI = 3.14; public static final String GREETING = "Good Morning!"; public static final int MATH_CODE = 1001; public static final int CHEMISTRY_CODE = 1002; }
UsingDefine.java
public class UsingDefine { public static void main(String[] args) { System.out.println(Define.GREETING); System.out.println(Define.MIN); System.out.println(Define.MAX); System.out.println(Define.MATH_CODE); System.out.println(Define.CHEMISTRY_CODE); System.out.println("원주률은" + Define.PI + "입니다."); } }