728x90
추상 메소드란 ?
다형성을 위해 메서드의 선언은 통일해야 하지만, 실제로 구현하는 내용은 자식 클래스마다 달라야 할 때, 부모 클래스의 메소드는 비워두고 자식 클래스에서 오버라이딩하여 구현해낼 수 있다. 선언부만 작성하고 구현부는 작성하지 않고 남겨둔 미완성 메소드를 '추상 메소드' 라고 부른다.
추상 메소드의 선언 방법
abstract 반환 타입 메소드 이름 (매개변수1, 매개변수2, ...);
class Pokemon { // 부모 클래스
abstract void hello(); // 추상 메소드
}
class Pika extends Pokemon { // 자식 클래스
@Override
void hello("피카피카"); // 메소드 오버라이딩, 구현 하지 않으면 컴파일 오류 발생
}
class Pyree extends Pokemon {
@Override
void hello("파아~~");
}
public class Test01 {
public static void main(String[] args) {
Pokemon p1 = new Pokemon(); // 추상 클래스는 직접 객체 생성 불가
Pika p = new Pika(); // 추상 클래스를 상속받은 자식은 객체 생성 가능
}
}
추상 클래스를 상속 받은 모든 자식 클래스는 컴파일 오류가 발생하기 때문에 반드시 추상 메소드를 오버라이딩 및 재정의가 강제된다는 특징이 있다. 또한 추상 클래스는 직접 객체를 생성할 수 없다.
추상 클래스
하나 이상의 추상 메소드를 포함하는 클래스를 가리켜 추상 클래스라고 한다. 추상 클래스도 일반 클래스와 다르지 않지만 추상 메소드를 포함하고 있다는 것이 차이점이다. 추상 클래스에도 생성자가 있고, 필드변수와 메소드도 가질 수 있다.
추상 클래스 선언 방법
[접근 제한자] abstract class 클래스명 {
// 필드
// 생성자
// 메소드 (추상 메소드 포함)
}
추상 클래스의 제약 조건
- 일반 클래스처럼 독립적으로 생성자를 호출해 객체를 생성할 수 없다.
- 자식 클래스의 생성자에서 super()을 통해 추상 클래스의 생성자를 호출하여 부모 객체를 생성한 후 자식 객체를 생성한다.
추상 클래스
public abstract class Pokemon {
String name;
Pokemon(String name) {
this.name = name;
}
}
public Pika extends Pokemon {
Pika() {
super("피카츄"); // 부모 클래스의 생성자 호출
}
}
public Pyree extends Pokemon {
Pyree() {
super("파이리");
}
}
추상 클래스와 추상 메소드의 용도
- 자식 클래스 간의 공통적인 필드와 메소드 이름을 통일할 수 있다.
- 반드시 구현해야 하는 메소드를 선언함으로써 공통 규격을 제공한다.
728x90
'JAVA > JAVA 정리' 카테고리의 다른 글
[JAVA] 예외처리방법 예제 (try catch) (2) | 2023.05.31 |
---|---|
[JAVA] 예외 처리 (0) | 2023.05.31 |
[JAVA] 다형성과 타입 변환 (0) | 2023.05.26 |
[JAVA] 상속 (0) | 2023.05.25 |
[JAVA] 생성자 (0) | 2023.05.24 |