본문 바로가기
JAVA

java 추상클래스(abstract class) +추상메소드 목적

by 자바비터 2022. 3. 19.

▶ 추상클래스란?

추상 메소드를 한 개 이상 가진 클래스로서 단 한개의 추상메소드를 가져도 추상클래스가 된다.

그리고 필드 변수를 선언하는 것도 가능하다.

   

  

▶ 추상메소드란?

메소드의 상세 동작이 정의되지 않은 메소드이다.

선언되어 있으나 구현되어 있지 않은 메소드, 중괄호가 없으며 선언만 되고 실체가 없다.

메소드의 상세 내용은 이 메소드를 활용하는 서브클래스에서 오버랑이딩으로 정의된다.

  

   

▶ 추상클래스의 목적

추상클래스는 서브클래스에서 필요로하는 기능을 선언만하여 두고

서브클래스가 상속받아 서브 클래스에서 오버라이딩하여 서브클래스에서 구현하도록 한다.

서브클래스에서 필요한 부분만 재정의함으로서 다형성, 재생산성을 가진다.

   

  

▶ 추상클래스 선언

추상클래스, 추상메소드는 abstract 로 선언한다.

ex) abstract class Calculater{}

ex) public abstract String getName();

  

  

▶ abstract 추상클래스 예제

abstract class Ex10Calculator { //추상클래스 abstract를 사용하여 정의
	//추상메소드란? 메소드의 상세 동작이 정의되지 않은 클래스
	//메소드의 상세 내용은 활용하는 부분에서 오버라이딩으로 정의됨
	public abstract int add(int a, int b);
	public abstract int subtract(int a, int b);
	public abstract double average(int[] a);
	public void aaa(int a, int b) {} //이 메소드는 중괄호가 있어서 추상 메소드가 아님
	//추상메소드는 중괄호를 갖지 않는다.
	//마지막 줄은 abstract가 적혀 있지 않은 일반 메소드이기 때문에 중괄호가 없으면 에러가 뜸.
	//중괄호가 없으면 abstract를 적어 추상메소드로 만들거나 
    	//아니면 중괄호를 달아서 일반 메소드로 만들어줘야함.
}

  

  

먼저 Ex10Calculator라는 추상클래스를 만들어주었다.

추상메소드 선언을 위해 abstract 키워드를 사용하였으며

메소드의 상세내용은 정의 되어있지 않고 선언만 해주었다.

이 때 선언만 된 추상메소드는 {} 중괄호를 갖지 않는다.

추상메소드가 아닌 일반 메소드에만 {} 중괄호를 쓰며 {} 중괄호로 에러가 날 수 있으니 주의해야한다.

  

  

public class Ex10 extends Ex10Calculator { //추상클래스 상속받음
	//@Override : 오버라이딩 되는 메소드임을 표시하는 어노테이션
	@Override
	//여기 Ex10Calculator의 추상클래스의 추상메소드들이 상세하게 표현됨
	public int add(int a, int b) {
		return a + b;
	}
	public int subtract(int a, int b) {
		return a - b;
	}
	public double average(int[] a) {
		double sum = 0;
		for(int i = 0; i < a.length; i++)
			sum += a[i];
		return sum / a.length;
	}

	public static void main(String[] args) {
		// 추상클래스의 객체를 생성할 수 없으므로 메인 클래스의 객체를 생성했다(업캐스팅)
		Ex10Calculator c = new Ex10();
		//추상 메소드 연산 결과가 표시됨
		System.out.println(c.add(2, 3));
		System.out.println(c.subtract(2,3));
		System.out.println(c.average(new int[] {2, 3, 4}));
	}
}

실행 결과 화면

  

이처럼 추상클래스를 상속받은 서브클래스에서

필요한 추상메소드들을 오버라이딩하여 상세 기능을 구현하였다.

또한 추상클래스는 객체생성이 불가능하므로 서브클래스객체를 생성, 

즉 업캐스팅하여 추상메소드를 활용할 수 있다.

댓글