Java

2024.04.24 추상 클래스(abstract class)

정훈5 2024. 4. 24. 15:04
학습 목표 

1. 추상 클래스란 뭘까?
2. 추상 클래스 구현해 보기

 

추상 클래스란 뭘까?

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

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

추상 메서드란?

 int add(int x, int y); // 선언 

 int add(int x, int y){ } // 구현부가 있음, 추상 메서드 아님

 

시나리오 코드1

 

package basic.ch21;

/*
 *  추상 클래스란?
 *  추상 메서드를 포함하고 있거나 
 *  abstract 키워드를 가지고 있는 클래스를 말한다.
 *  추상 클래스는 바로 new 키워드로 객체를 생성할 수 없다.
 */
public abstract class Animal {
	
	String name;
	
	public void move() {
		System.out.println("동물이 이동을 합니다.");
	}
	
	// 하나 이상의 추상 메서드가 있다면 ...
	
	// 추상 메서드는 -> 메서드의 선언부만 존재 + abstract 키워드 사용
	public  abstract void hunt();
	// 추상 메서드를 포함 하는 클래스는 반드시 추상 클래스가 되어야 한다.
	
	// 코드 테스트
	public static void main(String[] args) {
		
		Animal animal; // 데이터 타입으로 선언 가능
		
		// 추상 클래스는 기본적으로 new 할 수 없다.
		//animal = new Animal(); 
		
		
	} // end of main

}
package basic.ch21;

// 추상 클래스를 상속 한 경우
// 2가지 해결 방법
// 1. 자식 클래스를 추상 클래스로 만들어 버린다. ex) public abstract class  Human
// 2. 추상 메서드를 오버라이드 해서 구현 메서드로 재정의 한다. ex) @Override
public class  Human extends Animal {

	// 재 정의 --> 일반 메서드로 재정의
	@Override
	public void hunt() {		
		System.out.println("권총으로 사냥을 합니다.");
	}
	
	@Override
	public void move() {
		System.out.println("사람이 움직입니다.");
	}
}

 

package basic.ch21;

public class Tiger extends Animal {

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

 

package basic.ch21;

public class Person extends Human {

     @Override
	public void hunt() {
		System.out.println("사람이 권총으로 사냥을 합니다");
	}
}

 

package basic.ch21;

public class AnimalTest  {
	
	public static void main(String[] args) {
		// 계층구조 보는 방법 : Ctrl + T
		Person person;
		
	} // end of main

} // end of class

 

 

추상 클래스 구현해 보기

 

 

 

'Java' 카테고리의 다른 글

2024.04.25 인터페이스에 대한 고찰  (0) 2024.04.25
2024.04.25 인터페이스(interface)  (0) 2024.04.25
2024.04.24 다형성(Polymorphism)의 활용  (0) 2024.04.24
2024.04.24 다형성(Polymorphism)  (0) 2024.04.24
2024.04.24 의존관계  (0) 2024.04.24