추상 클래스(abstract class) 구현하기

일상 코딩·2022년 8월 16일

01.추상 클래스란?

  • 구현 코드 없이 메서드의 선언만 있는 추상 메서드(abstract method)를 포함한 클래스
  • abstract 예약어를 사용
  • 메서드 선언(declaration) : 반환타입, 메서드 이름, 매개변수로 구성
  • 메서드 정의(definition) : 메서드 구현과 동일한 의미 구현부(body) 를 가짐 ({ })

ex>

abstract int add(int x, int y); // 선언 => 추상 메서드
int add(int x, int y){ } // 구현부가 있음 => 추상 메서드 아님
  • 추상 클래스는 new 할 수 없음 ( 인스턴스화 할 수 없음 )

02.추상 클래스 구현하기

  • 메서드에 구현 코드가 없으면 abstract 로 선언
  • abstract로 선언된 메서드를 가진 클래스는 abstract로 선언
  • 모든 메서드가 구현 된 클래스라도 abstract로 선언되면 추상 클래스로 인스턴스화 할 수 없다.
  • 추상 클래스의 추상 메서드는 하위 클래스가 상속 하여 구현
  • 추상 클래스 내의 추상 메서드 : 하위 클래스가 구현해야 하는 메서드다.
  • 추상 클래스 내의 구현 된 메서드 : 하위 클래스가 공통으로 사용하는 메서드 ( 필요에 따라 하위 클래스에서 재정의 함 )

예제 구현하기

Computer.java

package ch09;

public abstract class Computer {
	
	// 추상 메서드는 상속 받는 자식 클래스가 구현
	public abstract void display();
	
	public abstract void typing();
	
	// 자식 클래스에서 공통으로 사용할 메서드만 구현
	public void turnOn() {
		System.out.println("전원을 켭니다.");
	}
	
	public void turnOff() {
		System.out.println("전원을 끕니다.");
	}
}

DeskTop.java

package ch09;

public class Desktop extends Computer {

	// 상속 받은 부모 클래스의 추상 메서드를 구현한다.
	@Override
	public void display() {
		System.out.println("Desktop display");
	}

	@Override
	public void typing() {
		System.out.println("Desktop display");
	}
	
	// 부모 클래스의 일반 메서드를 재정의한다.
	@Override
	public void turnOff() {
		System.out.println("Desktop turnOff");
	}	
}

NoteBook.java

package ch09;

public abstract class NoteBook extends Computer {
	
	// 상속 받은 부모 클래스의 추상 메서드를 구현한다.
	public void display() {
		System.out.println("NoteBook display");
	}
}

MyNoteBook.java

package ch09;

public class MyNoteBook extends NoteBook {
	
	// 상속 받은 부모 클래스의 추상 메서드를 구현한다.
	@Override
	public void typing() {
		System.out.println("MyNoteBook typing");
	}	
}

ComputerTest.java

package ch09;

public class ComputetTest {

	public static void main(String[] args) {
	
		// 추상 클래스는 인스턴스화 될 수 없다. 즉, new 생성자 불가능
		Computer desktop = new Desktop();
		desktop.display();
		
	}
}
  • 만약 클래스의 메서드 구현부가 모두 구현되었다고 하더라도 클래스에 abstract 키워드가 있으면 인스턴스화 할 수 없다.

출력 결과

profile
일취월장(日就月將) - 「날마다 달마다 성장하고 발전한다.」

0개의 댓글