7.10 추상 클래스
(1) 추상 클래스
: 객체를 생성할 수 있는 실체 클래스들의 공통적인 필드나 메소드를 추출해 선언한 클래스; 실체 클래스의 부모 역할
- 실체 클래스는 추상 클래스를 상속해 공통적인 필드나 메소드를 물려받을 수 있음
- 추상 클래스는 실체 클래스의 공통되는 필드, 메소드를 추출했기 때문에 new 연산자를 사용해 객체를 직접 생성할 수 없음
-> 추상 클래스는 새로운 실체 클래스를 만들기 위한 부모 클래스로만 사용됨(자식 클래스만 만들 수 있음); extends 뒤에만 올 수 있음
class Fish extends Animal {
//
}
(2) 추상 클래스 선언
- 클래스 선언에 abstract 키워드를 붙이면 추상 클래스 선언이 됨
- 추상 클래스도 필드, 생성자, 메소드를 선언할 수 있음
* 자식 객체가 생성될 때 super()로 추상 클래스의 생성자가 호출되기 때문에, 생성자도 반드시 있어야 함
public abstract class 클래스명 {
//필드
//생성자
//메소드
}
(3) 추상 메소드와 재정의
- 자식 클래스들이 가지고 있는 공통 메소드를 뽑아내어 추상 클래스로 작성할 때,
메소드 선언부(리턴타입, 메소드명, 매개변수)만 동일하고 실행 내용은 자식 클래스마다 달라야 하는 경우가 존재
-> 추상 메소드 선언
abstract 리턴타입 메소드명(매개변수, ...);
abstract void sound();
- abstract 키워드 & 메소드 실행 내용인 중괄호 {} 없음 (실행 내용을 가지지 않음)
-> ** 추상 메소드는 자식 클래스에서 반드시 재정의(오버라이딩)해서 실행 내용을 채워야 함!!
public abstract class Animal {
//추상 메소드 선언
public abstract void sound();
}
public class Dog extends Animal{
//추상 메소드 재정의
@Override
public void sound(){
System.out.println("멍멍");
}
}
public class Cat extends Animal {
//추상 메소드 재정의
@Override
public void sound(){
System.out.println("야옹");
}
}
public class AbstractMethodExample{
public static void main(String[] args) {
Dog dog = new Dog();
dog.sound();
Cat cat = new Cat();
cat.sound();
//매개변수의 다형성
animalSound(new Dog());
animalSount(new Cat());
}
public static void animalSound(Animal animal) { //Animal animal 부분 : 자동타입변환
animal.sound(); //재정의된 메소드 호출
}
}
7.11 봉인된 클래스
- java 15부터, 무분별한 자식 클래스 생성 방지 위해 봉인된(sealed) 클래스가 도입됨
- 언급된 클래스들만 자식 클래스가 될 수 있고, 그 이외는 자식 클래스가 될 수 없도록 선언
public sealed class Person permits Employee, Manager { ... }
- 봉인된 클래스를 상속하는 클래스들은 final 또는 non-sealed 키워드로 선언하거나,
sealed 키워드를 사용해 또 다른 봉인 클래스로 선언해야 함
public final class Employee extends Person { ... }
public non-sealed class Manager extends Person { ... }
'언어 > java' 카테고리의 다른 글
[Java] 8. 인터페이스 (2) - 4~7 (0) | 2025.05.25 |
---|---|
[Java] 8. 인터페이스 (1) - 1~3 (0) | 2025.05.22 |
[Java] 7. 상속 (2) - 5~6 (0) | 2025.05.20 |
[Java] 7. 상속 (1) - 1~4 (0) | 2025.05.20 |
[Java] 6. 클래스 (6) - singleton (0) | 2025.05.17 |