추상 클래스
- 클래스들의 틀 (틀 자체의 틀)
- 추상적인 내용만 정의하고 있는 클래스로, 구체적인 내용은 상속받아서 하위클래스에서 구현되도록 설계된 클래스이다.
- 추상 클래스(부모)는 클래스(자식)의 공통 요소들을 가상화시켜놓기 때문에 객체화시 구현(재정의)을 꼭 해야한다.
- 부모 추상 클래스의 역할은 단지 자식 클래스들을 만들 때 도와주는 역할을 수행한다.
- 자식 클래스에서 만들어질 메소드의 이름과 형태만 가지고 있다.
- 메소드에 {}바디가 없다. 이런 메소드를 추상 메소드라고 하며
abstract
키워드가 리턴타입 앞에 붙는다. - 추상 메소드가 하나라도 포함되어 있다면 추상 클래스로 만들어야 한다.
추상 클래스 선언
abstract class 추상클래스명{
abstract 리턴타입 추상메소드명();
리턴타입 일반메소드명(){ 메소드내용 };
}
추상 메소드는 자식 클래스에서 강제적으로 반드시 재정의 되어야 한다.
- 자식클래스를 생성할 때, 재정의하지 않으면 오류 -> 재정의에 대한 강제성 부여
일반 메소드도 추상 클래스 내부에서 존재할 수 있다.
final : 재정의되어서는 안되는 메소드에 사용
abstract class 가 아니어도 사용 가능
abstract class 추상클래스명{
abstract 리턴타입 추상메소드명();
리턴타입 일반메소드명(){ 메소드내용 };
final 리턴타입 메소드명(){ 메소드 내용};
}
Ex) Abstract class 사용
- abstract class Shape
public abstract class Shape {
double height;
double width;
//넓이는 각 도형마다 공식이 다르다.
// double getArea() {
// return height * width;
// }
abstract double getArea();
final void init() {
System.out.println("나는 도형입니다.");
}
void getName() {
System.out.println("저는 도형이에요");
}
}
- 자식클래스 class Tri
public class Tri extends Shape{
@Override
double getArea() {
return width*height/2;
}
@Override
void getName() {
System.out.println("저는 삼각형이에요");
}
// final 메소드는 사용 불가능
// void init() {
// }
}
'Java > Java(base)' 카테고리의 다른 글
[Java] 내부 클래스 Inner class , 익명 클래스 Anonymous Inner class (0) | 2021.12.01 |
---|---|
[Java] 인터페이스 interface, 다중 상속, 마크 인터페이스 (0) | 2021.12.01 |
[Java]접근 권한 제어자 public, private, protected, default / getter, setter (0) | 2021.11.30 |
[Java] Upcasting(업캐스팅), Downcasting(다운캐스팅), instanceof (0) | 2021.11.30 |
[Java] static (정적) : 모든 객체가 공유 (0) | 2021.11.29 |