abstract
abstract
로 지정된 클래스나 메소드는 직접적으로 사용할 수 없고, 반드시 상속해서 사용하도록 강제된다.
이렇게 하면 상위 클래스(추상 클래스)에서는 일부 메소드를 추상적으로 남겨두어 하위 클래스에서 구현하도록 한다. 상황에 따라 동작 방법이 달라지는 메소드를 추상 클래스로 구현하면 하위 클래스들에서 각자 다르게 구현하여 사용할 수 있다.
추상 메소드
추상 메소드란 메소드의 시그니처
만이 정의되어 있는 메소드를 의미한다.
메소드 시그니처(Method signature)란?
메소드가 설계된 구조를 의미하며,메소드 이름
,파라미터의 순서, 타입, 개수
로 식별된다.
abstract class A {
// 추상 메소드 (구체적인 로직이 구현되지 않음)
public abstract int b(int v1, int v2);
}
- 클래스의 멤버(변수, 메소드) 중 하나라도 abstract라면 해당 클래스는 추상 클래스가 된다.
- 상황에 따라 동작 방법이 달라지는 메소드는 추상 메소드로 만들어서 하위 클래스에서 구현하도록 하고, 공통적으로 사용할 수 있는 부분은 상위 클래스에서 구현한다.
추상 클래스의 상속
추상 클래스
abstract class A {
// 1. 추상 메소드는 본체(구체적인 로직)을 가지지 않는다.
public abstract int b(int v1, int v2);
// 2. 추상 메소드에 본체를 작성하면 컴파일 오류가 발생한다.
// public abstract int c() { System.out.println("Hello"); }
// 3. 추상 클래스 내에는 추상 메소드가 아닌 메소드도 존재할 수 있다.
public void d() {
System.out.println("world");
}
}
추상 클래스를 상속하여 구체화한 클래스
class B extends A {
public int b(int v1, int v2) {
return v1 + v2;
}
}
class C extends A {
public int b(int v1, int v2) {
return v1 - v2;
}
}
- 클래스 B, C는 클래스 A를 상속하고, 클래스 A의 추상 메소드인 메소드 b를 각자 다른 방식으로 구체화하여 오버라이딩하고 있다.
- 추상 클래스인 클래스 A는 단독으로 사용할 수 없지만, 클래스 B, C와 같이 상속한 클래스에서 추상 메소드를 구체화하여 사용할 수 있다.
참고자료
'언어 > Java' 카테고리의 다른 글
[Java] 상속 (0) | 2023.08.22 |
---|---|
[Java] final (0) | 2023.08.10 |
[Java] 접근 제어자 (0) | 2023.08.10 |
[Java] 클래스와 인스턴스 (0) | 2023.08.10 |