추상클래스

MIN·2023년 11월 10일

Java

목록 보기
14/36
post-thumbnail

학원 수업 자바 복습

🍭 추상클래스란?

추상클래스란 형식을 일정하게 만들기 위해 존재하는 클래스다.
추상클래스에는 추상 메서드를 만들 수 있는데
추상메서드란, 메서드의 body를 구현하지 않고 반환형, 매개변수, 메서드의 이름만 남겨놓는 것을 말한다.

abstract class Test3 {	// 추상클래스

	void function1() {	
		System.out.println("내용");
	} // 추상클래스도 일반메서드를 포함할 수 있다
	
	abstract void function2();	// 추상메서드
}

추상클래스 Test3과 추상메서드인 function2는 앞에 abstract를 붙여준다.
function2를 보면 메서드의 body부분은 구현되지않고 바로 세미콜론(;)으로 마무리된 것을 알 수 있다.
이러한 특징을 가지고 있는 추상클래스는 객체화할 수 없다.

이 추상클래스는 다른 클래스가 상속받아서 사용하게 되는데, 상속받는 서브클래스에서 구현되지않은 추상메서드를 오버라이딩 하여 구현해준다.

  • 추상 클래스 : 구체적인 내용이 없어 객체화(instantiate)할 수 없는 클래스, 추상 메서드를 포함한다
  • 추상 메서드 : 함수의 형태는 지정되어 있으나, 내용은 없어서 호출할 수 없는 함수

추상메서드를 상속받는 Sub클래스

class Sub extends Test3 {

	@Override
	void function2() {
		System.out.println("상속받아서 오버라이딩으로 구현한 내용");      

🍭 익명클래스

추상클래스는 생성자를 직접 호출하여 객체를 생성할 수 없다.
하지만, 별도의 서브클래스를 작성하지 않고 즉석에서 서브클래스를 만들고 객체를 생성할 수 있다!

즉석에서 만들어지기 때문에 클래스에 부여되는 이름은 별도로 없다
이런 형식을 익명클래스 (Anonymous Inner Type)라고 한다

abstract class Playable {
	String name;
	
	public Playable(String name) {	// 추상클래스 생성자
		this.name = name;
	}
    
	public abstract void attack();
}
public class Ex05 {
	public static void main(String[] args) {
		
		Playable ob = new Playable("마리오") { // Playable을 상속받는 이름없는 서브 클래스
			@Override
			public void attack() {
				System.out.printf("%s가 적을 밟아서 공격합니다\n", name);
			}	// 즉석에서 메서드 오버라이딩하여 사용
		};
		
		ob.attack();	
		
	}// end of main
}// end of class

맨 위의 Playable 클래스는 attack 추상메서드를 지닌 추상클래스이다.
원래라면 생성자를 직접 호출하여 객체생성이 불가하지만
그자리에서 즉석으로 중괄호{ }를 통해 내부에 서브 클래스를 익명으로 구현하여 추상메서드를 오버라이딩 하였다.

이렇게 만들어진 익명클래스의 객체 ob는 attack메서드를 호출하였을 때 잘 불러와진다!

출력 :
마리오가 적을 밟아서 공격합니다

profile
기초부터 시작하는 감쟈 ※ 소개글 확인해주세요!! ※

0개의 댓글