추상 클래스
- 추상 클래스는 미완성된 클래스이다.
- 미완성된 클래스는 미완성된 메소드인 추상 메소드를 포함하고 있다.
- 추상 클래스는 혼자로는 클래스의 역할을 다 못하지만, 새로운 클래스를 작성하는 데 있어 그 바탕이 되는 부모 클래스로서의 중요한 의미를 갖는다.
왜냐하면 클래스를 작성함에 있어서 어느정도 작성된 상태에서 시작할 수 있기 때문이다.
- 클래스 앞에 abstract 키워드를 붙인다.
abstract class Car {
abstract void accelrate();
}
- abstract 키워드가 있는 클래스라고 모두 구현해야 하는 것은 아니다. 왜냐하면 단지 공유의 목적으로 abstract class 를 만드는 경우도 있기 때문이다.
추상 클래스의 목적
- 기존의 클래스에서 공통된 부분을 추상화하여 상속하는 클래스에게 추상 메소드 구현을 강제화한다.
메소드의 동작을 구현하는 자식 클래스에게 위임한다.
- 공유의 목적을 가지고 있다.
추상 클래스의 특징
- 추상 클래스는 추상 메소드가 아닌 일반 메소드, 멤버도 포함할 수 있다.
하지만 추상 메소드를 하나라도 포함하고 있다면 추상 클래스로 선언해야 한다.
- 추상 클래스는 동작이 정의되지 않은 추상 메소드를 포함하고 있으므로 인스턴스를 생성할 수 없다.
abstract class Animal {
abstract void cry();
}
class Cat extends Animal {
@Override
void cry(){
System.out.println("냐옹냐옹 ~~!");
}
}
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();
}
}
추상 클래스인 Animal 은 추상 메소드인 cry() 를 가지고 있으며, Animal 클래스를 상속받는 자식 클래스인 Dog, Cat 클래스는 cry() 메소드를 오버라이딩 해야만 인스턴스를 생성할 수 있다.
* 추상 메소드
- 선언부만 작성하고 구현부는 작성하지 않는 메소드이며, 앞에 abstract 키워드를 붙인다.
- 구현부를 작성하지 않는 이유는 메소드의 내용이 상속받은 클래스에 따라 달라질 수 있기 때문이다.
- 사용하는 목적은 추상 메소드를 포함한 클래스를 상속받는 자식 클래스가 반드시 추상 메소드를 구현하도록 강제하기 위함이다.
- 추상 클래스를 상속받은 자식 클래스는 오버라이딩을 통해 조상인 추상 클래스의 추상 메소드를 모두 구현해야 한다.
- 만약, 자식 클래스에서 추상 메소드를 하나라도 구현하지 않는다면 자식 클래스 역시 추상 클래스로 지정해야 한다.
인터페이스 VS 추상 클래스
* 추상 클래스(abstract)
- 추상 클래스는 추상 메소드를 1개 이상 가지고 있는 클래스를 의미한다.
- 기존 메소드 이외에 추상 메소드를 상속 시켜서, 반드시 구현이 필요한 내용인 추상 메소드를 상속받은 클래스에서 구현시키는 것이 주 목적이다.
- 추상 메소드를 1개 이상 가진 클래스는 객체 생성이 안되므로, 추상 클래스를 상속받은 클래스의 객체 생성을 위해서는 추상 메소드를 구현해야 한다.(추상 메소드 구현을 강제한다.)
* 인터페이스(interface)
- 상수와 메소드 선언 집합으로서, 정의된 메소드를 implements 받은 곳에서 모두 구현을 강제한다.
- JAVA 는 단일 상속만을 지원하기 때문에, 추상 클래스를 상속받은 클래스는 다른 클래스를 상속받을 수 없다.
- 그러나 인터페이스는 인터페이스 끼리 상속이 가능하므로, 여러 인터페이스 상속이 가능하다.
참고 : https://velog.io/@woo00oo/%EC%B6%94%EC%83%81-%ED%81%B4%EB%9E%98%EC%8A%A4
추상 클래스
추상 클래스는 미완성된 클래스이다.미완성된 클래스는 미완성된 메소드인 추상 메소드를 포함하고 있다.추상 클래스는 혼자로는 클래스의 역할을 다 못하지만, 새로운 클래스를 작성하는 데
velog.io
'JAVA > 객체지향' 카테고리의 다른 글
JAVA - 객체지향 프로그래밍(OOP) - 인터페이스 (0) | 2022.01.23 |
---|---|
JAVA - 객체지향 프로그래밍(OOP) 특징 - 2 (0) | 2022.01.23 |
JAVA - 객체지향 프로그래밍(OOP) 특징 - 1 (0) | 2022.01.23 |
JAVA - 객체지향 프로그래밍(OOP) 기본 (0) | 2022.01.22 |