추상클래스란?
앞에 abstract 라고 불리는데 추상클래스가 문법적으로 어떻게 쓰이는지 알수있다
추상클래스
추상메소드를 포함한 클래스이다.
추상 메소드 – 구현 코드가 없이 선언부만 있는 메소드이다.
abstract 예약어를 사용한다.
추상클래스는 new (인스턴스화) 할 수 없다.
cf) concrete class 명칭할수있다.
추상클래스 구현
메서드와 클래스에 abstract 키워드를 사용한다.
추상 메서드가 포함된 클래스는 추상 클래스로 선언한다.
모든 메소드가 구현되었다고 해도 클래스에 abstract 키워드를 사용하면 추상 클래스이다.
추상클래스 사용하기
추상 클래스는 주로 상속의 상위클래스로 사용된다.
추상메소드 : 하위 클래스가 구현해야 하는 메소드 ( 책임을 위임한다. )
구현된 메소드 : 하위 클래스가 공통으로 사용하는 기능의 메소드 , 하위 클래스에 따라 재정의 할 수 있다.
package abstractex;
public abstract class Computer { // abstract 메소드를가지고있으면 abstract 클래스로 만든다.
public abstract void disPlay(); // ; 세미콜론은 구현을 하지 않겠다는 뜻이다.
public abstract void typing(); // abstract 로 추상메소드 라고 명시해준다.
// 하위클래스에서 구현해줘야 한다. 구현할책임을 하위클래스에 위임한다.
public void trunOn() {
System.out.println("전원을 켭니다.");
}
public void turnOff() {
System.out.println("전원을 끕니다.");
}
}
Computer 추상클래스 상속받아서 추상메소드 모두 구현하기
package abstractex;
public class DeskTop extends Computer {
// 하위클래스에서 abstract 다 구현해준다. 만약 모두 구현해 주지 않으면 자식클래스를 abstract 클래스로 만든다.
@Override
public void disPlay() {
System.out.println("DeskTop display");
}
@Override
public void typing() {
System.out.println("DeskTop typing");
}
@Override
public void turnOff() { // 가상메소드 부르기
System.out.println("DeskTop 전원을 끕니다.");
}
}
Computer 추상클래스 상속받기
package abstractex;
public abstract class NoteBook extends Computer {
@Override
public void typing() {
System.out.println("typing");
}
}
NoteBook 추상클래스를 상속받기
package abstractex;
public class MyNoteBook extends NoteBook {
@Override
public void disPlay() {
System.out.println("MyNoteBook display");
}
}
업캐스팅 묵시적 형변환을 통해 하위클래스 오버라이딩으로 선언된 메소드 호출하기
package abstractex;
public class ComputerTest {
public static void main(String[] args) {
// Computer computer = new Computer(); 추상클래스는 new 인스턴스화 생성되지 않는다.
Computer computer = new DeskTop(); // 묵시적 형변환 똑같이 추상클래스도 성립된다.
computer.disPlay();
computer.turnOff(); // 상위클래스 선언된게 불릴것이다.
// 근데 DeskTop 클래스에서오버라이딩 하면 그 메소드가 호출된다.(가상메소드)
NoteBook myNote = new MyNoteBook();
}
}
'JAVA Programming' 카테고리의 다른 글
[41] final 템플릿메소드 활용하기 + 다형성이해-자식 , 추상클래스 (0) | 2020.07.16 |
---|---|
[40] 추상클래스를 이용한 템플릿 메소드 , final static 상수 (0) | 2020.07.16 |
[37] 다운캐스팅 과 instanceof (0) | 2020.07.16 |
[36] 다형성 (Polymorphism) 이란 ? (0) | 2020.07.15 |
[35] 메소드 오버라이딩 , 업캐스팅되면 과연어떤게 호출? 가상테이블 (0) | 2020.07.15 |