-
자바 step9 - AbstractClass(override)Java 2022. 11. 6. 14:53
Weapon class
package test.mypac; /* * 클래스를 만들어서 우리에게 사용하도록 제공해주는 개발자가(유틸리티나 프레임워크를 공급해주는) 있다고 가정하자. * * 그 개발자는 특정 메소드를 우리의 상황에 맞게 구현하도록 미완성인 메소드를 제공할 때도 있다. * * 미완성 된 메소드를 추상(abstract) 메소드라고 하며 추상메소드를 하나이상 가지고 있는 클래스를 * * 추상(abstract) 클래스라고 한다. * * 추상 메소드와 추상 클래스를 만들기 위해서는 abstract 예약어가 필요하다. * */ public abstract class Weapon { //무기 작동을 준비하는 메소드 public void prepare() { System.out.println("무기 작동을 준비합니다."); } //공격하는 메소드 public abstract void attack(); }
package test.main; import test.mypac.Weapon; public class MainClass04 { /* * Weapon 추상클래스를 상속받은 inner class * * main() 메소드는 static 메소드 이기 때문에 main() 메소드에서 사용하려면 * * inner class 도 static 영역에 올라가 있어야 하기 때문에 static 예약어가 필요하다. */ static class Gun extends Weapon{ @Override public void attack() { System.out.println("공격!! 공격!! 공격~!!!"); } } public static void main(String[] args) { Weapon w1=new Gun(); useWeapon(w1); // local inner class class Missile extends Weapon{ @Override public void attack() { System.out.println("슈웅~ 콰앙~!!!"); } } Weapon w2=new Missile(); useWeapon(w2); // 객체를 생성해서 지역변수에 담지 않고 바로 생성해서 useWeapon() 메소드 호출하기 useWeapon(new Missile()); } public static void useWeapon(Weapon w) { w.prepare(); w.attack(); } } <console> 무기 작동을 준비합니다. 공격!! 공격!! 공격~!!! 무기 작동을 준비합니다. 슈웅~ 콰앙~!!! 무기 작동을 준비합니다. 슈웅~ 콰앙~!!!
Weapon 추상클래스를 상속받은 inner class
main() 메소드는 static 메소드 이기 때문에 main() 메소드에서 사용하려면 inner class 도 static 영역에 올라가 있어야 하기 때문에 static 예약어가 필요하다.
Gun class를 상속받아 Weapon 객체를 만들었으며 override가 되어있기 때문에 attack() 메소드 사용이 가능하다.
Weapon class를 상속받아 Missile class를 만들었다. 여기서는 override로 attack() 메소드를 재정의 하여 사용하였다.
마지막으로 Weapon class를 상속받아 useWeapon을 만들어 두가지의 메소드를 사용할 수 있도록 준비해 두었다. useWeapon을 호출하는 것으로 위의 prepare(), attack() 메소드가 실행된다.
package test.main; import test.mypac.Weapon; public class MainClass05 { public static void main(String[] args) { Weapon w1=new Weapon() { @Override public void attack() { System.out.println("전군~!! 전진!!!!!"); } }; useWeapon(w1); // 지역변수 만들지 않고 바로 익명클래스로 객체 생성 후 참조값 전달하기 useWeapon(new Weapon() { @Override public void attack() { System.out.println("전군!~!! 전진!!!!!"); } }); } static public void useWeapon(Weapon w) { w.prepare(); w.attack(); } } <console> 무기 작동을 준비합니다. 전군~!! 전진!!!!! 무기 작동을 준비합니다. 전군!~!! 전진!!!!!
Weapon class를 상속받아 Weapon 객체를 만들 때도 override가 가능하다(객체 생성 기준).
지역변수를 만들지 않고 바로 익명클래스로 객체 생성 후 참조값 전달하는 것도 가능하다.
위 두 가지 방법 중 편한 방법 사용 가능!
'Java' 카테고리의 다른 글
자바 step10 - interface(자바의 람다함수, override) (0) 2022.11.06 자바 step10 - interface(implements, orverride, final 예약어) (0) 2022.11.06 자바 step9 - AbstractClass(클래스 안에 클래스(내부 클래스)) (0) 2022.11.06 자바 step9 - AbstractClass(override) (0) 2022.11.06 자바 step8 - Extends(super, protected) (0) 2022.10.26