본문 바로가기

DEVELOPER/Java

추상 클래스(abstract class)

반응형

추상 클래스란?


  • 구현 코드 없이 메서드의 선언만 있는 추상 메서드(abstrct method)를 포함한 클래스
  • 메서드 선언(declaration) : 반환 타입, 메서드 이름, 매개변수로 구성
  • 메서드 정의(definition) : 메서드 구현(implementation)과 동일한 의미 구현부(body)를 가짐 → ({ })
int add(int x, int y); //선언
int add(int x, int y) { } // 구현부가 있음, 추상 메서드 아님
  • abstract 예약어를 사용
  • 추상 클래스는 new 할 수 없음( 인스턴스화 할 수 없음)

추상 클래스 구현하기

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

 


예제 구현


Computer를 상위 클래스로 DeskTop, NoteBook을 상속하게 구현

예제 설계

위 설계에서 보이는 메서드, 클래스를 봤을 때
비스듬한 글씨체 : 구현부가 없는 추상 클래스, 추상 메서드
정자 글씨체 : 구현된 메서드

1. Computer 클래스 (abstract 클래스)

public abstract class Computer {

	//하위 클래스에게 책임 위임.
	public abstract void display();
	public abstract void typing();
	
	//하위 클래스도 공통으로 사용할 메서드
	public void turnOn() {
		
		System.out.println("전원을 켭니다.");
	}
	
	public void turnOff() {
		
		System.out.println("전원을 끕니다.");
	}
}
  • Computer라는 클래스에는 구현부가 있는 메서드와 구현부가 없는 메서드가 있다 따라서 abstract를 적어 추상 클래스란 것을 나타내어 준다.
  • 구현부가 없는 메서드도 abstract를 적어 추상 메서드란 것을 명시해준다.
  • abstract는 하위 클래스에서 구현해준다.

 

2. Computer를 상속받은 하위 클래스 DeskTop

public class DeskTop extends Computer{

	@Override
	public void display() {
		System.out.println("Desktop display");
	}

	@Override
	public void typing() {
		System.out.println("Desktop typing");
		
	}

	//turn off 재정의
	@Override
	public void turnOff() {

		System.out.println("Desktop turnOff");
	}

}
  • DeskTop은 Computer의 추상 클래스를 모두 받아서 구현해준다.
  • 추가로 turn off 메서드를 재정의 해주었다.

 

3. Computer를 상속받은 하위 클래스 NoteBook

public abstract class NoteBook extends Computer {

	@Override
	public void display() {

		System.out.println("NoteBook display");
	}

}
  • NoteBook은 Computer을 상속받았으나 Computer의 abstract method를 다 구현하지 않았다.
  • 따라서 NoteBook 또한 abstract class가 된다. ( 이는 하위 클래스를 한번 더 만들고 책임을 위임해줘야 한다.)

 

4. NoteBook를 상속받은 하위 클래스 MyNoteBook

public class MyNoteBook extends NoteBook{

	@Override
	public void typing() {

		System.out.println("MyNoteBook typing");
	}
	
}
  • MyNoteBook은 NoteBook클래스에서 다 구현하지 않은 추상 메서드를 구현한다.

 

반응형

'DEVELOPER > Java' 카테고리의 다른 글

인터페이스(interface)  (2) 2021.04.27
추상 클래스의 응용 - 템플릿 메서드 패턴  (0) 2021.04.26
다운 캐스팅과 instanceof  (0) 2021.04.26
오버라이딩(Overriding)  (0) 2021.04.25
객체 간의 상속  (0) 2021.04.24