abstract method)를 포함한 클래스abstract 예약어를 사용declaration) : 반환타입, 메서드 이름, 매개변수로 구성definition) : 메서드 구현과 동일한 의미 구현부(body) 를 가짐 ({ })ex>
abstract int add(int x, int y); // 선언 => 추상 메서드 int add(int x, int y){ } // 구현부가 있음 => 추상 메서드 아님
new 할 수 없음 ( 인스턴스화 할 수 없음 )abstract 로 선언abstract로 선언된 메서드를 가진 클래스는 abstract로 선언abstract로 선언되면 추상 클래스로 인스턴스화 할 수 없다.예제 구현하기
Computer.java
package ch09; public abstract class Computer { // 추상 메서드는 상속 받는 자식 클래스가 구현 public abstract void display(); public abstract void typing(); // 자식 클래스에서 공통으로 사용할 메서드만 구현 public void turnOn() { System.out.println("전원을 켭니다."); } public void turnOff() { System.out.println("전원을 끕니다."); } }
DeskTop.java
package ch09; public class Desktop extends Computer { // 상속 받은 부모 클래스의 추상 메서드를 구현한다. @Override public void display() { System.out.println("Desktop display"); } @Override public void typing() { System.out.println("Desktop display"); } // 부모 클래스의 일반 메서드를 재정의한다. @Override public void turnOff() { System.out.println("Desktop turnOff"); } }
NoteBook.java
package ch09; public abstract class NoteBook extends Computer { // 상속 받은 부모 클래스의 추상 메서드를 구현한다. public void display() { System.out.println("NoteBook display"); } }
MyNoteBook.java
package ch09; public class MyNoteBook extends NoteBook { // 상속 받은 부모 클래스의 추상 메서드를 구현한다. @Override public void typing() { System.out.println("MyNoteBook typing"); } }
ComputerTest.java
package ch09; public class ComputetTest { public static void main(String[] args) { // 추상 클래스는 인스턴스화 될 수 없다. 즉, new 생성자 불가능 Computer desktop = new Desktop(); desktop.display(); } }
- 만약 클래스의 메서드 구현부가 모두 구현되었다고 하더라도 클래스에
abstract키워드가 있으면 인스턴스화 할 수 없다.
출력 결과