본문 바로가기
Java

Abstract class (추상 클래스)

by 개발자공부 2024. 4. 26.

추상 클래스

  추상 클래스는 하나 이상의 추상 메서드를 포함하고 있는 클래스이다. 추상 메서드는 구현이 없는(구현부{ }가 없는) 메서드이며, 추상 클래스 내에서는 이러한 추상 메서드의 정의만을 포함하고 있습니다.

 

추상 클래스는 직접적으로 객체를 생성할 수 없으며, 다른 클래스에서 상속받아 구현되어야 한다.

int add(int x, int y); // <-- 선언. 선언부만 있다. 추상 메서드이다.

int add(int x, int y) {}; // <-- 구현부가 있다. 추상 메서드가 아니다.

 

추상 클래스 시나리오 코드

/**
 * 추상 클래스란? 
 * 추상 메서드를 포함하고 있거나 
 * abstract 키워드를 가지고 있는 클래스를 말한다. 
 * 추상 클래스는 바로 new 키워드로 객체를 생성할 수 없다.  
 */
 
public abstract class Animal {
	
	String name; 
	public void move() {
		System.out.println("동물이 이동을 합니다.");
	}
    
    // 추상 메서드를 한 개 이상 포함 하는 클래스는 
    // 반드시 추상 클래스가 되어야 한다.
	public abstract void hunt();
	
	// 코드 테스트 
	public static void main(String[] args) {
		
		Animal animal; // 데이터 타입으로 선언 가능 
		// 추상 클래스는 기본적으로 new 할 수 없다. 
		animal = new Animal();   
		
		
	} // end of main
// 추상 클래스를 상속한 경우 
// 2가지 해결 방법 
// 1. 자식클래스를 추상 클래스로 만들어 버린다. 
// 2. 추상 메서드를 오버라이드 해서 구현 메서드로 재정의 한다.
public abstract class Human extends Animal {

	@Override
	public void move() {
		System.out.println("사람이 움직입니다");
	}
    
    }
public class Tiger extends Animal {

	// 재정의 - 구현 메서드 
	@Override 
	public void hunt() {
		System.out.println("호랑이가 앞발로 사냥을 합니다.");
	}
	
	@Override
	public void move() {
		System.out.println("살금 살금 이동합니다.");
	}
}
public class Person extends Human {
	@Override
	public void hunt() {
		System.out.println("사람이 권총으로 사냥을 합니다");
	}
}

연습문제

 


정리

☞ 추상 클래스는 추상 메서드를 한 개 이상 가지고 있다.

객체 생성 불가능. (new키워드로 생성자를 만들 수 없다.) 

☞ 그렇기 때문에 자식 클래스가 상속 받아야 한다.

☞ 추상 클래스를 상속 받으면 메서드를 재정의 하거나 자신이 추상 클래스가 되어야 한다.

'Java' 카테고리의 다른 글

Object 클래스  (0) 2024.04.29
Interface (인터페이스)  (0) 2024.04.26
Polymorphism(다형성) & Upcasting+Downcasting  (0) 2024.04.26
Dependency (의존관계)  (0) 2024.04.26
Association(연관관계)  (0) 2024.04.25