[Java 객체지향] 추상 클래스

2022. 2. 1. 09:52·Java & Kotlin

추상 클래스 (absract class)

  • 구현부가 없고 선언부만 있는 추상 메서드를 포함한 클래스
  • 메서드 선언 (메서드의 시그니처) : 반환타입, 메서드 이름, 매개변수로 구성
  • 메서드 정의 : = 메서드 구현, body {} 부분 구현
  • 추상 클래스는 new 키워드로 인스턴스를 생성할 수 없다. (인스턴스화 할 수 없음) → 추상 메서드의 구현 코드가 없기 때문
  • 상속을 하기 위해 만든 클래스이다.
int add(int x, int y);		// 추상 메서드
int add(int x, int y){};	// 구현부가 있으므로 추상 메서드 X

 

 

예제 코드

클래스 다이어그램

 

Computer.java
  • 추상 메서드는 absract 키워드를 이용해 정의
  • 구현의 책임은 하위 클래스에 위임한다.
  • 모든 클래스에서 공통으로 사용할 메서드는 일반 메서드로 정의하고 구현부까지 작성한다.
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
  • Computer 클래스를 상속받는 Desktop 클래스도 absract 메서드를 포함하기 때문에 정의해놓은 모든 abstract 메서드를 구현해주거나, 역시 absract 클래스로 선언될 수 있다.
  • 여기서는 모든 absract 메서드를 구현해주었다.
  • 메서드를 모두 구현해주었을 때도 absract 클래스로 선언할 수 있다. → new 불가, 상속만을 위한 클래스
  • 추가로 Computer 클래스에서 이미 구현부가 있는 메서드도 오버라이딩 해줄 수 있다.
package ch09;

public class Desktop extends Computer{

	@Override
	public void display() {	// absract 메서드 구현
		System.out.println("Desktop Display");
	}

	@Override
	public void typing() {	// absract 메서드 구현
		System.out.println("typing");
	}
	
	@Override
	public void turnOff() {	// 일반 메서드 오버라이딩
		System.out.println("Desktop turnOff");
	}

}

 

NoteBook.java
  • 추상 클래스 안에서 추상 메서드는 모두 구현할 수도 있고 일부만 구현할 수도 있다.
  • 추상 메서드 일부만 구현부가 있다면 absract 클래스로 선언해준다.
package ch09;

public abstract class NoteBook extends Computer{
	
	@Override
	public void display() {
		System.out.println("NoteBook display");
	}

}

 

MyNoteBook.java
package ch09;

public class MyNoteBook extends NoteBook{
	
	@Override
	public void typing() {
		System.out.println("typing");
	}
}

 

ComputerTest.java
package ch09;

public class ComputerTest {

	public static void main(String[] args) {
		
		Computer desktop = new Desktop();
		desktop.turnOff();	// Computer 클래스에 정의되어 있는 메서드만 사용가능
	}

}

 

저작자표시 비영리 변경금지 (새창열림)

'Java & Kotlin' 카테고리의 다른 글

[Java 객체지향] 추상 클래스 활용 (템플릿 메서드 패턴)  (0) 2022.02.01
[Java 객체지향] 다운 캐스팅과 instanceof  (0) 2022.01.31
[Java 객체지향] 다형성  (0) 2022.01.31
'Java & Kotlin' 카테고리의 다른 글
  • [Java 객체지향] 인터페이스
  • [Java 객체지향] 추상 클래스 활용 (템플릿 메서드 패턴)
  • [Java 객체지향] 다운 캐스팅과 instanceof
  • [Java 객체지향] 다형성
Sue
Sue
개발 공부 로그
  • Sue
    Sue's devlog
    Sue
  • 전체
    오늘
    어제
    • 분류 전체보기 (122)
      • Algorithm (2)
      • WEB (8)
      • Java & Kotlin (83)
      • Spring (26)
      • Database (1)
      • Infra (0)
      • Git (1)
      • devlog (1)
  • 인기 글

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Sue
[Java 객체지향] 추상 클래스
상단으로

티스토리툴바