Abstract (추상화)
- 미완성 설계도, 완전하지 않은 클래스
- 다른 클래스가 상속받아 완성 가능, 그 자체로는 인스턴스 생성
추상 클래스의 특징
- 클래스 자체로는 인스턴스 생성 X
- 추상 메서드를 하나 이상 포함
- 확장성 제공을 위한 사용
추상 클래스 구현 방법
- abstract 키워드를 사용하여 선언
추상 메서드
- 메서드의 선언부만 존재, 구현부는 존재하지 않는 메서드
- 자식 클래스에서 해당 메서드를 반드시 구현하도록 강제하는 역할
- abstract 키워드를 사용 + 구현부 {} 대신 세미콜론(;)을 사용하여 선언을 마침
(예제 코드)
더보기
abstract class Human{
abstract void work();
}
class Police extends Human {
void work() {
System.out.println("경찰은 치안유지 업무를 담당합니다.");
}
}
class Student extends Human{
void work() {
System.out.println("학생은 공부를 합니다.");
}
}
public class A_Abstract {
public static void main(String[] args) {
// Human human = new Human();
// >> 추상 클래스를 통한 인스턴스화는 불가!
Police police = new Police();
police.work();
Student student = new Student();
student.work();
}
}
package chapter09;
abstract class Animal {
// 추상 메서드
abstract void makeSound();
// 구체적인 메서드 (일반 메서드 - 선언부, 구현부)
void eat() {
System.out.println("동물은 먹이를 먹습니다");
}
}
class Cat extends Animal{
// 추상 메서드 구현
void makeSound() {
System.out.println("야옹");
}
// 상속받은 메서드 재정의(오버라이딩)
@Override
void eat() {
System.out.println("고양이는 츄르를 먹습니다.");
}
}
class Dog extends Animal{
// 추상 메서드 구현
void makeSound() {
System.out.println("멍멍");
}
}
public class A_Abstract {
public static void main(String[] args) {
// = 인스턴스 생성 =
// Animal animal = new Animal(); - Error
Cat cat = new Cat();
Dog dog = new Dog();
cat.eat(); // 고양이는 츄르를 먹습니다. >> 오버라이딩
cat.makeSound();
dog.eat(); // 동물은 먹이를 먹습니다 >> 부모 클래스에서 정의된 기능
dog.makeSound();
}
}
'Java' 카테고리의 다른 글
[Java] Exception (0) | 2024.09.10 |
---|---|
[Java] Interface (0) | 2024.09.10 |
[Java] Polymorphism (0) | 2024.09.09 |
[Java] Type (0) | 2024.09.09 |
[Java] final (0) | 2024.09.09 |