[Java] 추상 클래스와 추상 메서드 (abstract)

2022. 7. 4. 18:06·Java/자바 이론
목차
  1. 1. 추상 클래스의 특징
  2. 2. 추상 클래스의 객체 생성 방법 2가지

추상 클래스는 추상 메서드를 하나라도 가지고 있는 클래스를 말한다.

추상 메서드는 '메서드의 본체가 완성되어 있지 않은 미완성 메서드'를 말한다.

상속을 목적으로 사용하며 자식 클래스에서 오버라이딩을 강제한다.

 


1. 추상 클래스의 특징

 

1. 객체를 직접 생성할 수 없다.

힙 메모리에 생성되는 객체는 내부 요소가 미완성된 상태로 들어갈 수 없기 때문이다.

따라서 추상 클래스를 상속하는 자식 클래스는 부모에게 상속받은 추상 메서드를 반드시 완성(오버라이딩) 해야 한다. (강제성을 부여한다.)

만약, 오버라이딩하지 않을 경우 상속 받은 추상 메서드를 포함하고 있기 때문에 자식 클래스도 추상클래스가 된다. 

 

2. 추상 메서드는 선언부만 존재하며 구현부는 존재하지 않는다.

이 구현부를 자식 클래스에서 오버라이딩해서 사용한다.


2. 추상 클래스의 객체 생성 방법 2가지

 

자식 클래스의 생성 여부에 따라 크게 2가지 방법이 있다.

 

 

1. 일반 클래스로 상속해 객체 생성

abstract class Animal{
	public abstract void cry(); //추상 메서드 {}가 없다.
}

class Cat extends Animal{
	@Override
	public void cry() {
		System.out.println("야옹스");
	}
}

class Dog extends Animal{
	@Override
	public void cry() {
		System.out.println("멍멍");
	}
}

public class Main {
	public static void main(String[] args) {
		Animal cat = new Cat();
		Animal dog = new Dog();
		
		cat.cry();
		dog.cry();
		
	}
}

추상 클래스 Animal을 상속받는 자식 클래스 Cat, Dog 클래스를 만들어서 객체를 생성했다.

장점 : 여러 개의 객체를 생성해야 할 경우 좋다.

단점 : 자식 클래스를 정의해야 한다.

 

2. 익명 이너 클래스 사용

public class Main {
	public static void main(String[] args) {
		
      	  //익명 이너 클래스
		Animal cat = new Animal() {
        	@Override
			public void cry() {
				System.out.println("야옹스");
			}
		};
		
		cat.cry(); //야옹스 출력

 

장점 : 자식 클래스를 정의하지 않아도 된다.

단점 : 일회성 이기 때문에 여러 객체를 만들 경우에는 불편하다.

+ 이벤트, 안드로이드 등에서 자주 쓰이는 방법이라고 한다.

 


인터페이스를 이해하기 위해서 추상 클래스는 꼭 알고 넘어가야한다.

추상 메서드를 통해 자식 클래스에게 오버라이딩을 강제하는 기능이라고 알아두자.

 


참고 문헌 : Do it! 자바 완전정복

 

'Java > 자바 이론' 카테고리의 다른 글

[Java] 자바 내부 클래스 4종류 (Inner Class)  (0) 2022.07.05
[Java] 자바 인터페이스(Interface)란?  (0) 2022.07.05
[Java] 메서드 오버로딩과 오버라이딩  (1) 2022.06.30
[Java] 자바 super 키워드 & super() 메서드  (0) 2022.06.30
[Java] 자바 클래스 상속의 장점과 특징  (2) 2022.06.30
  1. 1. 추상 클래스의 특징
  2. 2. 추상 클래스의 객체 생성 방법 2가지
'Java/자바 이론' 카테고리의 다른 글
  • [Java] 자바 내부 클래스 4종류 (Inner Class)
  • [Java] 자바 인터페이스(Interface)란?
  • [Java] 메서드 오버로딩과 오버라이딩
  • [Java] 자바 super 키워드 & super() 메서드
현기
현기
  • 현기
    현기의 개발블로그
    현기
  • 전체
    오늘
    어제
    • 분류 전체보기 (120)
      • Front-End (39)
        • Next (5)
        • React (8)
        • React Native (11)
        • Flutter (0)
        • Vue (1)
        • JSP (9)
        • HTML, CSS, JS (5)
      • Back-End (16)
        • Node.js (3)
        • Spring (8)
        • Flask (1)
        • AWS (4)
      • DB (5)
        • Oracle (4)
        • MySQL (1)
      • Python (7)
      • Java (27)
        • 자바 이론 (17)
        • 코딩테스트 연습 & 실습 (10)
      • 자료구조 & 알고리즘 (7)
        • 코딩테스트 (6)
        • 알고리즘 (1)
      • 블록체인 (0)
      • 프롬프트 엔지니어링 (0)
      • CS 지식 (5)
      • IT뉴스 (0)
      • 일상 (3)
      • etc (11)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    JSP
    포스트맨
    오라클
    node.js
    쓰레드
    Spring
    스택
    Java
    DI
    큐
    Python
    상속
    리액트 네이티브
    JDBC
    티스토리챌린지
    자바스크립트
    자바
    Express
    IS-A
    파이썬
    React Native
    자바 스프링
    서블릿
    react
    오블완
    REST API
    React Native Chart
    react-native-chart-kit
    그리디
    next-intl
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
현기
[Java] 추상 클래스와 추상 메서드 (abstract)
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.