1. 추상 클래스란?
1. 1. 추상 클래스 개념 & 특징
- 메서드 본체를 완성하지 못한 메서드. 더 구체적으로 설명한다면, 실체 클래스의 공통적인 부분들(변수, 메서드)를 추출해서 선언한 클래스 (자식 멤버를 통일)
- 실체성이 없고 구체적이지 않아서 "객체" 생성 불가능
- 추상 클래스는 보통 하나 이상의 추상 메서드를 포함하는데, 포함하지 않을 수도 있음.
- 추상 클래스와 상속 클래스는 "상속" 관계
- 실체 클래스들은 반드시 추상 메서드를 상속받아 오버라이딩(재정의) 해야 한다.
1.2 추상 클래스 용도
- 필드와 메서드 이름을 통일하여 유지보수성을 높이고 통일성을 유지
- 설계시, 시간절약
1.3 추상 클래스 선언
- 추상 클래스에 생성자도 포함이 가능하다. → 자식 클래스가 부모 생성자 super()를 호출할 수 있기 때문
abstract class 클래스이름 {
//필드
//생성자
//메서드
}
추상메서드
- 추상 클래스와 같이 abstract 키워드를 붙여서 선언한다.
- 추상 메서드는 실체가 없음. 말 그대로 추상적인 메서드. 자식이 이 추상 메서드를 상속 받아서 오버라이딩 해야하기 때문에 본체(중괄호)가 없다.
abstract 반환타입 메서드이름() ;
2. 인터페이스란?
2.1 인터페이스 개념
- 클래스 간에 상호작용하는 규격
- 추상 클래스의 극단적인 예 → 모든 멤버를 추상화한다.
- 추상 클래스가 미완성 설계도라면, 인터페이스는 기본 설계도(가이드라인, 규격 등)이다.
2.2 인터페이스 구성 요소
- 인스턴스 변수 선언 X, 객체 생성 X → 생성자 X
- 추상 메서드와 상수만 가능 → 추상 메서드는 반드시 상속받아서 오버라이딩 해야 하고, 상수 필드는 제공해주는 값만 사용할 것
- 자바 8부터 디폴트 메서드와 정적 메서드 사용 가능
→ 디폴트 메서드를 왜 써야 하는가?
기존 인터페이스에 새로운 기능을 추가할 때 사용한다. 새로운 추상 메서드를 추가하고 싶은데 어떤 클래스는 구현하지 않으면 전체적인 에러가 나기 때문에 전체적인 오류를 발생하지 않기 위해 디폴트 메서드를 사용한다. + 오버라이딩 가능 + 인스턴스 메서드이므로 객체를 생성한 후 호출
→ 정적 메서드?
구현된 본체를 가진다. 하지만 오버라이딩이 될 수 없고 인터페이스로 직접 호출한다.
2.3 인터페이스 상속
- 인터페이스를 상속하려면 extends 키워드 사용
- 인터페이스를 구현하려면 implements 키워드를 사용
프로그래밍 문제
* 쉽게 배우는 자바 프로그래밍 책을 기반으로 작성합니다.
✅ 추상 클래스와 구현 클래스를 작성한 후 테스트 프로그램 실행
public class practice01 {
public static void main(String[] args) {
Concrete c = new Concrete(100, 50);
c.show();
}
}
abstract class Abstract {
int i;
public Abstract(int i) {
this.i = i;
}
//추상메서드
abstract void show();
}
class Concrete extends Abstract {
int j;
public Concrete(int i, int j) {
super(i);
this.j = j;
}
@Override
void show() {
System.out.println("i = " + i + ", j = " + j);
}
}

✅ Talkable 인터페이스와 Talkable 인터페이스를 구현하는 Korean 클래스와 American 클래스를 구현하고 테스트 프로그램 완성하기
public class practice04 {
static void speak(Talkable t) {
t.talk();
}
public static void main(String[] args) {
speak(new Korean());
speak(new American());
}
}
interface Talkable {
void talk();
}
class Korean implements Talkable {
@Override
public void talk() {
System.out.println("안녕하세요!");
}
}
class American implements Talkable {
@Override
public void talk() {
System.out.println("Hello!");
}
}

✅ Controller 추상클래스와 상속받는 TV, Radio 클래스.
public class practice05 {
public static void main(String[] args) {
Controller[] c = {new TV(false), new Radio(true)};
for (Controller controller : c)
controller.show();
}
}
abstract class Controller {
boolean power;
void show() {
if (power)
System.out.println(getName() + "가 켜졌습니다.");
else
System.out.println(getName() + "가 꺼졌습니다.");
}
abstract String getName();
}
class TV extends Controller {
public TV(boolean power) {
this.power = power;
}
@Override
String getName() {
return "TV";
}
}
class Radio extends Controller {
public Radio(boolean power) {
this.power = power;
}
@Override
String getName() {
return "라디오";
}
}

Reference
[JAVA] 추상 클래스란?
https://limkydev.tistory.com/188
[JAVA] 자바 추상클래스란?
[JAVA] 자바 추상클래스란? 추상클래스 이 글 하나로 박살내자. 추상클래스의 문법적인 특징이나, 객체생성이 되고 안되고 이런 특징들이 중요한게 아닙니다. 도대체 추상클래스가 무엇이고 왜
limkydev.tistory.com
[JAVA] 인터페이스란?
https://limkydev.tistory.com/197?category=957527
[JAVA] 자바 인터페이스란?(Interface)_이 글 하나로 박살내자
1. 인터페이스 개념과 역할 인터페이스....이 글하나로 박살내자. (회사에서 존댓말을 많이 쓰기때문에 여기서라도 반말로 글을 써보고 싶음 ㅎ) 인터페이스는 뭘까?? 결론부터 말하면, 극단적으
limkydev.tistory.com
'Language > JAVA' 카테고리의 다른 글
[JAVA] 백준_1차원 배열(10818, 2562, 3052) (1) | 2023.11.09 |
---|---|
[JAVA] 백준_반복문(2739, 25304, 10871) (0) | 2023.11.09 |
[JAVA] 백준_조건문(1330, 2525, 2480) (0) | 2023.11.09 |
[JAVA] 백준_입출력과 사칙연산(2557, 1000, 10869, 10926, 18108, 3003, 10430) (1) | 2023.11.09 |
[JAVA] 쉽게 배우는 자바 프로그래밍_8장 기본 패키지 (0) | 2022.06.13 |