이것이 자바다(7) 추상 클래스

Sungmin·2023년 10월 30일
0

자바 기본 개념

목록 보기
18/21

추상 클래스

공통되는 특성을 추출한 것

추상 클래스는 실체 클래스의 공통되는 필드와 메서드를 추출해서 만들었기 때문에 객체를 직접 생성해서 사용할 수 없다.
즉, new 연산자로 인스턴스를 생성하지 못한다.

또한 새로운 실체 클래스를 만들기 위해 부모 클래스로만 사용된다.
즉, extends 뒤에만 올 수 있는 클래스이다.


추상 클래스의 용도

실체 클래스들의 공통적인 특성(필드, 메서드) 을 뽑아서 추상 클래스로 만드는 이유는?

  1. 실체 클래스들의 공통된 필드와 메서드의 이름을 통일할 목적.

    동일한 데이터와 기능임에도 불구하고 이름이 다를경우 혼동이 올 수 있다.

  2. 실체 클래스를 작성할 때 시간을 절약

    공통된 필드와 메서드는 추상 클래스에 모두 선언해 두고, 실체 클래스마다 다른 점만 선언하게 되면 시간을 절약할 수 있다.


추상 클래스 선언

추상 클래스를 선언할 때는 abstract 키워드를 붙여야 한다.
이렇게 하면 new 연산자를 이용해서 객체를 만들지 못하고 상속을 통해 자식 클래스만 만들 수 있게 된다.

그렇지만, 자식 객체가 생성될 때 super()를 호출해서 추상 클래스 객체를 생성하므로 추상 클래스도 생성자는 필수.


추상 메서드와 오버라이딩

예를들어 각각 동물의 소리를 나타내는 클래스들이 필요하다면
추상 클래스에 추상 메서드를 선언할 수 있다.

모든 동물은 소리를 내지만 각각 다른 소리를 내기 때문에
구체적인 소리는 실체 클래스에서 오버라이딩 해서 실행 내용을 작성하면 된다.

추상 클래스에서 추상 메서드가 선언될 경우

public | protected abstract 리턴타입 메서드명(매개변수, ...);

이 때, 자식 클래스는 추상 메서드를 무조건 재정의(오버라이딩) 해 줘야 한다.

ex)

public class Dog extends Animal {
	public Dog() {
    	this.kind = "포유류";
	}

	@Override
	public void sound() {
		System.out.prinltn("멍멍");
  	}	
}

메서드의 다형성을 적용한 호출방식

public Class AnimalExample {
	public static void main(String[] args) {
    	animalSound(new Dog());
        aniamlSound(new Cat());
    }    
     
    public static void animalSound(Animal animal) {
    	animal.sound();
    }

부모 타입의 매개 변수에 자식 객체를 대입하여 메서드의 다형성을 적용한 호출방식

profile
Let's Coding

0개의 댓글