[java] 추상 클래스 추상 메소드(abstract method)
추상 클래스
추상 메소드(abstract method)
추상 메소드(abstract method)란 자식 클래스에서 반드시 오버라이딩해야만 사용할 수 있는 메소드를 의미
- 자바에서는 추상 메소드를 선언하여 사용하는 목적인 추상 메소드가 포함된 클래스를 상속받는 자식 클래스가 반드시 추상 메소드를 구현하도록 하기 위함임
- 예를 들면, 모듈처럼 중복되는 부분이나 공통적인 부분은 미리 다 만들어진 것을 사용하고, 이를 받아 사용하는 쪽에서는 자신에게 필요한 부분만을 재정의하여 사용함으로써 생산성이 향상되고 배포 등이 쉬워지기 때문
- 추상 메소드는 선언부만 이 존재하며, 구현부는 작성되어 있지 않음
- 바로 이 작성되어 있지 않은 구현부를 자식 클래스에서 오버라이딩하여 사용하는 것임
추상 메소드 문법
abstract 반환타입 메소드이름();
추상 클래스(abstract class)
자바에서는 하나 이상의 추상 메소드를 포함하는 클래스를 가리켜 추상 클래스(abstract class)라고 함
-
추상 클래스는 객체 지향 프로그래밍에서 중요한 특징인 다형성을 가지는 메소드의 집합을 정의할 수 있도록 함
-
즉, 반드시 사용되어야하는 메소드를 추상 클래스에 추상 메소드로 선언해 놓으면, 이 클래스를 상속받는 모든 클래스에서는 이 추상 메소드를 반드시 재정의해야 함
-
추상 클래스 문법 선언
abstract class 클래스이름 { ... abstract 반환타입 메소드이름(); ... }
-
이러한 추상 클래스는 동작이 정의되어 있지 않은 추상 메소드를 포함하고 있으므로, 인스턴스를 생성할 수 없음
-
추상 클래스는 먼저 상속을 통해 자식 클래스를 만들고, 만든 자식 클래스에서 추상클래스의 모든 추상 메소드를 오버로딩하고 나서야 비로소 자식 클래스의 인스턴ㅅ를 생성할 수 있게 됨
예제
//예제
abstract class Animal { abstract void cry(); }
class Cat extends Animal { void cry() { System.out.println("냐옹냐옹!"); } }
class Dog extends Animal { void cry() { System.out.println("멍멍!"); } }
public class Polymorphism02 {
public static void main(String[] args) {
// Animal a = new Animal(); // 추상 클래스는 인스턴스를 생성할 수 없음.
Cat c = new Cat();
Dog d = new Dog();
c.cry();
d.cry();
}
}
//실행 결과
냐옹냐옹!
멍멍!
추상 메소드의 사용 목적
추상 메소드가 포함된 클래스를 상속받는 자식클래스가 반드시 추상 메소드를 구현하도록 하기 위함임
- 만약 일반 메소드로 구현한다면 사용자에 따라 해당 메소드를 구현할 수도 있고, 안 할 수도 있음
- 하지만 추상 메소드가 포함된 추상 클래스를 상속받은 모든 자식 클래스는 추상 메소드를 구현해야만 인스턴스를 생성할 수 있으므로, 반드시 구현하게 됨