1. 추상 클래스 (Abstract Class)
- 추상 클래스는 미완성된 클래스이다.
- 추상 클래스는 미완성된 메소드인 추상 메소드를 하나 이상 포함해야 한다.
- 추상 클래스는 추상 메소드가 아닌 일반 메소드, 멤버도 포함할 수 있다.
- 클래스 정의 시 앞에 abstract 키워드를 붙인다.
- 추상 클래스는 동작이 정의되어 있지 않은 추상 메소드를 포함하고 있으므로 객체를 생성할 수 없다.
- 상속하는 클래스에게 추상 메소드의 구현을 강제화한다. 메소드의 동작은 구현하는 자식 클래스에게 위임한다.
- 하위 클래스에서, 상속 받은 모든 추상 메소드를 구현하면 객체를 생성할 수 있다.
추상 메소드가 하나라도 구현하지 않은 상태로 남아있으면, 그 하위 클래스도 추상 클래스이다. - 추상 클래스는 하위 클래스의 공통점을 뽑아 상속해줄 목적으로 만들고, 하위 클래스에 기본 틀을 제공한다.
2. 추상 메소드 (Abstract Method)
- 선언부만 작성하고 구현부는 작성하지 않는 메소드이며, 앞에 abstract 키워드를 붙인다.
- 구현부를 작성하지 않는 이유는 메소드의 내용이 상속받은 클래스에 따라 달라질 수 있기 때문이다.
- 사용하는 목적은 추상 메소드를 포함한 클래스를 상속받는 자식 클래스가 반드시 추상 메소드를 구현하도록 강제하기 위함이다.
- 추상 클래스를 상속받은 자식 클래스는 오버라이딩을 통해 부모인 추상 클래스의 추상 메소드를 모두 구현해야 한다.
- 만약, 자식 클래스에서 추상 메소드를 하나라도 구현하지 않는다면 자식 클래스 역시 추상 클래스로 지정해야 한다.
3. 샘플 코드
추상 클래스인 Animal은 추상 메소드인 cry()를 가지고 있으며, Animal 클래스를 상속받는 자식 클래스인
Dog, Cat 클래스는 cry() 메소드를 오버라이딩해야만 인스턴스를 생성할 수 있다.
// 추상 클래스
abstract class Animal {
// 추상 메소드
abstract void cry();
}
// 자식 클래스1
class Cat extends Animal {
// 자식 클래스는 상속받은 추상 메소드를 오버라이딩해서 구현해야 한다.
@Override
void cry(){
System.out.println("냐옹냐옹 ~~!");
}
}
// 자식 클래스2
class Dog extends Animal {
@Override
void cry(){
System.out.println("멍멍 ~~!");
}
}
// 메인 클래스
public class Test{
public static void main(String[] args){
// Animal animal = new Animal();
// 추상 클래스는 자체적으로 인스턴스를 생성할 수 없다.
Cat cat = new Cat();
Dog dog = new Dog();
cat.cry();
dog.cry();
}
}
'Java' 카테고리의 다른 글
Java - final 키워드 (0) | 2023.01.20 |
---|---|
Java - 인터페이스(Interface) (0) | 2023.01.20 |
Java - 변수의 종류와 메모리 구조 (0) | 2023.01.20 |
Java - 클래스 상속(Inheritance), 오버라이딩(Overriding) (0) | 2023.01.19 |
Java - 접근제어자와 getter/setter, 캡슐화 (0) | 2023.01.19 |