java

26. 추상화(Abstract)

dalc3154 2025. 2. 27. 17:31

추상 클래스란?

미완성된 설계도(클래스)

=> 이것만으론 인스턴스를 생성할 수 없음

>> 다른 클래스가 상속받아서 추상화된 부분을 완성해야 사용 가능

 

추상 클래스의 특징

클래스 자체만으로 인스턴스 생성 불가

반드시 하나 이상의 추상 메소드를 포함해야 함

확장성 제공을 위해 사용 >> 자식 클래스가 공통된 기능을 공유 + 고유 기능을 구현하도록 강제함

다중 상속은 불가능 >> 하나의 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