Notice
Recent Posts
Recent Comments
Link
YTCW
java 추상, abstract 본문
추상 클래스
미완성 설계도
완전하지 않은 클래스
다른 클래스가 상속받아 완성 가능
그 자체로는 인스턴스 생성 x
추상 클래스의 특징
1. 클래스 자체로는 인스턴스 생성이 불가하다
2. 추상 메서드를 하나 이상 포함해야한다.
3. 확장성 제공을 위한 사용
추상 클래스의 구현 방법은
abstrct 키워드를 사용하여 선언하고
메서드의 선언부만 존재, 구현부는 존재하지 않는 메서드
자식 클래스에서 해당 메서드를 반드시 구현하도록 강제하는 역할!
abstract 키워드를 사용 + 구현부 {} 대신 세미콜론;을 사용하여 선언을 마침
abstract class Human {
abstract void work();
}
추상 클래스는 자신의 추상 메서드를 포함하는 자식 클래스에 의해 반드시 구현되어야 한다.
추상 클래스를 상속받은 자식 클래스가 추상 메서드를 구현하지 않는다면
해당 자식 클래스도 추상 클래스로 선언해야한다.
class Police extends Human {
void work() {
System.out.println("경찰은 치안유지 업무를 담당합니다.");
}
}
//-'동물' 추상 클래스를 상속
//- makeSound 추상 메서드를 구현 강아지(멍멍), 고양이(야옹)
//'동물' 추상 클래스 생성
abstract class Animal {
//- makeSound 추상 메서드를 포함
abstract void makeSound();
// 구체적인 메서드(일반 메서드 - 선언부, 구현부)
void eat() {
System.out.println("This animal eats food");
}
}
//고양이, 강아지 클래스 생성
class Cat extends Animal {
// 추상 메서드 구현
void makeSound() {
System.out.println("야옹");
}
// 상속받은 메서드 재정의(오버라이딩)
@Override
void eat() {
System.out.println("This animal eats fish");
}
}
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();
// : 메서드 사용
dog.makeSound(); // 구현된 메서드 호출
dog.eat(); // 상속받은 메서드 호출
cat.makeSound(); // 구현된 메서드 호출
cat.eat();
}
}
'java' 카테고리의 다른 글
java 예외처리, exception (3) | 2024.09.09 |
---|---|
java 인터페이스, interface (0) | 2024.09.09 |
java 다형성 (0) | 2024.09.09 |
java 자료형 변환 (0) | 2024.09.09 |
java 캡슐화 (0) | 2024.09.06 |