추상 클래스는 오브젝트가 아니다
추상클 래스는 new할 수 없음 → 객체 생성 x
독립적으로 띄울 방법은 없음
상속을 해서 자식 클래스를 띄우면 추상 클래스도 같이 메모리에 뜸
package ex06.example5; import javax.swing.plaf.PanelUI; abstract class 판사{ // 추상클래스는 오브젝트가 아니다. => new할 수 없음 public abstract void 심문(); } abstract class 증인{ public abstract void 대답(); } class 왕 extends 판사 { public void 심문(){ System.out.println("왕은 심문한다"); } } class 왕비 extends 판사 { public void 심문(){ System.out.println("왕비는 심문한다"); } } class 모자장수 extends 증인 { public void 대답(){ System.out.println("모자장수는 대답한다"); } } class 토끼 extends 증인 { public void 대답(){ System.out.println("토끼는 대답한다"); } } class 앨리스 extends 증인{ @Override // 어노테이션 : JVM에게 힌트를 줌 public void 대답() { //추상클래스 => 재정의를 강제시킴 System.out.println("앨리스는 대답한다"); } } public class AliceApp { public static void main(String[] args) { 판사 u1 = new 왕비(); // [판사, 왕비] 증인 u2 = new 앨리스(); // [증인, 앨리스] u1.심문(); u2.대답(); } }
추상 클래스를 만드는 이유
- 재정의를 강제시킴
- 오버라이딩//동적 바인딩이 되어야 함
→메소드 이름을 강제해서 오류를 줄임
package ex06; abstract class Shape00 { int x, y; public void translate(int x, int y) { this.x = x; this.y = y; } public abstract void draw(); } class Rectangle00 extends Shape00 { int width, height; public void draw() { System.out.println("사각형 그리키 메소드"); } } class Circle00 extends Shape00 { int width, height; public void draw() { System.out.println("원 그리키 메소드"); } } public class AbstractTest { public static void main(String[] args) { Shape00 s1 = new Circle00(); s1.draw(); } }
Share article