JAVA/JAVA 정리

[JAVA] 추상클래스 & 추상메소드

웹코린이 2023. 5. 30. 16:11
728x90

추상 메소드란 ?

 다형성을 위해 메서드의 선언은 통일해야 하지만, 실제로 구현하는 내용은 자식 클래스마다 달라야 할 때, 부모 클래스의 메소드는 비워두고 자식 클래스에서 오버라이딩하여 구현해낼 수 있다. 선언부만 작성하고 구현부는 작성하지 않고 남겨둔 미완성 메소드를 '추상 메소드' 라고 부른다.

 

추상 메소드의 선언 방법

abstract 반환 타입  메소드 이름 (매개변수1, 매개변수2, ...);

 

 

class Pokemon { // 부모 클래스
	abstract void hello(); // 추상 메소드
}

class Pika extends Pokemon { // 자식 클래스
	@Override
	void hello("피카피카"); // 메소드 오버라이딩, 구현 하지 않으면 컴파일 오류 발생
}

class Pyree extends Pokemon {
	@Override
    void hello("파아~~");
}

public class Test01 {
	public static void main(String[] args) {
		Pokemon p1 = new Pokemon(); // 추상 클래스는 직접 객체 생성 불가
        Pika p = new Pika(); // 추상 클래스를 상속받은 자식은 객체 생성 가능
    }
}

추상 클래스를 상속 받은 모든 자식 클래스는 컴파일 오류가 발생하기 때문에 반드시 추상 메소드를 오버라이딩 및 재정의가 강제된다는 특징이 있다. 또한 추상 클래스는 직접 객체를 생성할 수 없다.

 

추상 클래스

  하나 이상의 추상 메소드를 포함하는 클래스를 가리켜 추상 클래스라고 한다. 추상 클래스도 일반 클래스와 다르지 않지만 추상 메소드를 포함하고 있다는 것이 차이점이다. 추상 클래스에도 생성자가 있고, 필드변수와 메소드도 가질 수 있다.

 

추상 클래스 선언 방법

[접근 제한자] abstract class 클래스명 { 
    // 필드
    // 생성자
    // 메소드 (추상 메소드 포함)
}

 

추상 클래스의 제약 조건

  • 일반 클래스처럼 독립적으로 생성자를 호출해 객체를 생성할 수 없다.
  • 자식 클래스의 생성자에서 super()을 통해 추상 클래스의 생성자를 호출하여 부모 객체를 생성한 후 자식 객체를 생성한다.

 

추상 클래스

public abstract class Pokemon {
	String name;
    
    Pokemon(String name) {
    	this.name = name;
    }
}

public Pika extends Pokemon {
	
    Pika() {
    	super("피카츄"); // 부모 클래스의 생성자 호출
    }  
}

public Pyree extends Pokemon {
	
    Pyree() {
    	super("파이리");
    }
}

 

추상 클래스와 추상 메소드의 용도

  • 자식 클래스 간의 공통적인 필드와 메소드 이름을 통일할 수 있다.
  • 반드시 구현해야 하는 메소드를 선언함으로써 공통 규격을 제공한다.
728x90