-
자바 step9 - AbstractClass(override)Java 2022. 11. 6. 14:35
[ 추상클래스 (Abstract Class) ]
- class 예약어 앞에 abstract 를 명시해서 클래스를 정의한다.
- 형태만 정의되고 실제 구현은 되지 않은 메소드가 존재할수 있다.
- 형태만 정의된 메소드를 만들때는 abstract 예약어를 붙어서 메소드를 정의한다.
- 생성자는 존재하지만 단독으로 객체 생성은 불가하다
- 추상클래스 Type 의 id 가 필요하다면 추상클래스를 상속받은 자식클래스를 정의해서 객체 생성한다.
- 추상클래스를 상속받은 자식클래스는 부모의 추상메소드를 모두 오버라이드(재정의) 해야한다.Weapon class를 생성하였다.
package test.mypac; /* * 클래스를 만들어서 우리에게 사용하도록 제공해주는 개발자가(유틸리티나 프레임워크를 공급해주는) 있다고 가정하자. * * 그 개발자는 특정 메소드를 우리의 상황에 맞게 구현하도록 미완성인 메소드를 제공할 때도 있다. * * 미완성 된 메소드를 추상(abstract) 메소드라고 하며 추상메소드를 하나이상 가지고 있는 클래스를 * * 추상(abstract) 클래스라고 한다. * * 추상 메소드와 추상 클래스를 만들기 위해서는 abstract 예약어가 필요하다. * */ public abstract class Weapon { //무기 작동을 준비하는 메소드 public void prepare() { System.out.println("무기 작동을 준비합니다."); } //공격하는 메소드 public abstract void attack(); }
Weapon class를 상속받아 MyWeapon class를 생성하였다.
package test.mypac; public class MyWeapon extends Weapon { @Override public void attack() { System.out.println("전원 공격~!!!"); } }
Weapon class에는 attack() 메소드에 abstract을 명시했는데 정의만하고 아무런 구현은 하지 않았다.
package test.main; import test.mypac.MyWeapon; import test.mypac.Weapon; /* * [ 추상클래스 (Abstract Class) ] * * - class 예약어 앞에 abstract 를 명시해서 클래스를 정의한다. * - 형태만 정의되고 실제 구현은 되지 않은 메소드가 존재할수 * 있다. * - 형태만 정의된 메소드를 만들때는 abstract 예약어를 * 붙어서 메소드를 정의한다. * - 생성자는 존재하지만 단독으로 객체 생성은 불가하다 * - 추상클래스 Type 의 id 가 필요하다면 추상클래스를 상속받은 * 자식클래스를 정의해서 객체 생성한다. * - 추상클래스를 상속받은 자식클래스는 부모의 추상메소드를 * 모두 오버라이드(재정의) 해야한다. */ public class MainClass01 { public static void main(String[] args) { Weapon w1=new MyWeapon(); w1.prepare(); w1.attack(); } } <console> 무기 작동을 준비합니다. 전원 공격~!!!
MyWeapon class 상속받아 Weapon 객체를 생성하였으며 attack() 메소드는 MyWeapon에 구현하여 그것을 override를 하였으므로 사용할 수 있다.
package test.mypac; public class Goattack extends Weapon{ @Override public void attack() { System.out.println("공격 공격 공격~!!!"); } }
package test.main; import test.mypac.Goattack; import test.mypac.Weapon; public class MainClass02 { public static void main(String[] args) { //여러분이 직접 클래스를 만들고 객체 생성을 해서 아래의 useWeapon() 메소드를 호출해보세요. //클래스명도 마음대로... attack 메소드안에서 어떤 동작을 할지 마음대로... //테스트 후 작성한 클래스와 main() 메소드안에 작성한 코드를 카톡으로 공유해보세요. Weapon w1=new Goattack(); MainClass02.useWeapon(w1); } //이 메소드는 미리 준비된 메소드이고 아주 특별한 동작을 하는 메소드라고 가정하자 public static void useWeapon(Weapon w) { w.prepare(); w.attack(); System.out.println("잠시 휴식 후..."); w.attack(); } } <console> 무기 작동을 준비합니다. 공격 공격 공격~!!! 잠시 휴식 후... 공격 공격 공격~!!!
위와 매한가지로 같은 방식이지만 이번에는 mainclass에 class를 생성하여 Weapon class를 상속받아 바로 사용하는 형식이다. Goattack class에서도 override가 되어있기 때문에 attack() 메소드를 사용할 수 있다.
'Java' 카테고리의 다른 글
자바 step9 - AbstractClass(override) (0) 2022.11.06 자바 step9 - AbstractClass(클래스 안에 클래스(내부 클래스)) (0) 2022.11.06 자바 step8 - Extends(super, protected) (0) 2022.10.26 자바 step8 - Extends(extends, casting, Override, super) (0) 2022.10.26 자바 step7 - Array(2) (0) 2022.10.25