추상 클래스란?
미완성된 설계도(클래스)
=> 이것만으론 인스턴스를 생성할 수 없음
>> 다른 클래스가 상속받아서 추상화된 부분을 완성해야 사용 가능
추상 클래스의 특징
클래스 자체만으로 인스턴스 생성 불가
반드시 하나 이상의 추상 메소드를 포함해야 함
확장성 제공을 위해 사용 >> 자식 클래스가 공통된 기능을 공유 + 고유 기능을 구현하도록 강제함
다중 상속은 불가능 >> 하나의 extends만 가능
메소드 오버라이딩과 추상 메소드
추상 메소드: 반드시 자식 클래스에서 오버라이딩 해야됨(필수)
일반 메소드: 필요시 오버라이딩 함(선택)
추상 클래스 구현법
클래스 선언시 앞에 abstract 키워드 사용
추상 메소드란?
메소드의 선언부만 존재하고 구현부가 없는 메소드
자식 클래스가 상속할 때 해당 메소드를 반드시 구현하도록 강제함
abstract 클래스명;
##메소드의 구성: 선언부 + 구현부
[접근제어자] 반환타입 메소드명 (매개변수 ...) {구현부 - 메소드의 기능 동작}
추상 메소드 구현의 예시
abstract class Human {
abstract void work();// 추상 메소드 >> 구현부{} 없음
}
class Police extends Human {
// 추상 메소드 구현
@Override
void work() {
System.out.println("경찰은 치안유지 업무를 담당합니다");
}
}
class Student extends Human {
// 추상 메소드
@Override
void work() {
System.out.println("학생은 공부를 합니다");
}
}
추상 클래스 사용의 예시
abstract class Animal {
// 추상 메소드
abstract void makeSound();
// 일반 메소드
void eat() {
System.out.println("동물은 먹이를 먹습니다");
}
}
class Dog extends Animal{
void makeSound() {
System.out.println("멍멍");
}
@Override
void eat() {
System.out.println("강아지는 개껌을 먹습니다");
}
}
class Cat extends Animal {
void makeSound() {
System.out.println("야옹");
}
}
public class A_Abstract {
public static void main(String[] args) {
// Animal animal = new Animal(); >> 추상 클래스로는 인스턴스화 할 수 없음
Dog dog = new Dog();
Cat cat = new Cat();
dog.makeSound();// 멍멍
dog.eat();// 강아지는 개껌을 먹습니다
cat.makeSound();// 야옹
cat.eat();// 동물은 먹이를 먹습니다
}
}
'java' 카테고리의 다른 글
실습) 추상 클래스 활용 1 (0) | 2025.02.27 |
---|---|
27. 인터페이스(Interface) (0) | 2025.02.27 |
25. 다형성 (Polymorphism) (0) | 2025.02.27 |
24. 클래스의 형 변환 (0) | 2025.02.25 |
실습) 도서 관리 시스템 (0) | 2025.02.25 |