Human human = new Human(); // 불가능
Computer 추상 클래스
public abstract class Computer { // Computer에서 구현하지 못하는 기능은 추상메서드 사용!! public abstract void display(); public abstract void typing(); // Computer의 공통기능 구현! public void turnOn() { System.out.println("전원을 켭니다"); } public void turnOff() { System.out.println("전원을 끕니다"); } }
Computer 에서 추상화한 내용을 작성하면 상속만 적용.
public class Desktop extends Computer { @Override public void display() { System.out.println("Desjktop display"); } @Override public void typing() { System.out.println("Desktop typing"); } }
Computer의 추상메서드들(display(), typing())을 모두 상속하지 않으면 abstract 사용하여 추상화!
public abstract class NoteBook extends Computer{ // Computer의 추상메서드들을 모두 상속하지 않으면 abstract 사용하여 추상화! @Override public void display() { System.out.println("NoteBook display "); } }
NoteBook 에서 Computer 추상메서드를 모두 상속하지 않아 MyNoteBook에서 나머지 추상메서드 작성
public class MyNoteBook extends NoteBook{ @Override public void typing() { System.out.println("MyNoteBook typing"); } }
추상클래스를 사용하는 이유는 상속과 비슷하다.
하위클래스에서 구체적으로 명시함으로 규격에 맞는 실체클래스 구현!public class ComputerTest { public static void main(String[] args) { // Computer computer = new Computer(); // 추상 클래스는 new 할 수 없음(인스턴스화 할 수 없음) // NoteBook note = new NoteBook(); // 추상 클래스는 new 할 수 없음 Computer desktop = new Desktop();// 만약 desktop이 abstract를 사용하는 추상클래스가 된다면 인스턴스화 할 수 없다. Computer notebook = new MyNoteBook(); desktop.turnOff(); desktop.display(); notebook.typing(); } }
전원을 끕니다
Desjktop display
MyNoteBook typing