코딩이란 무엇일까

[Java/자바]추상 메서드와 추상 클래스 본문

Java

[Java/자바]추상 메서드와 추상 클래스

둥구는 지굴다 2022. 10. 5. 16:50

안녕하세요 오늘은 자바에서의 추상 메서드와 추상 클래스에 대해 알아보겠습니다!

추상 메서드란?

추상 메서드 선언 부만 정의하고 구체적인 내용은 비워 놓은 메서드를 말합니다.

추상 메서드를 사용할 때 주의할 점

추상 메서드가 있는 클래스를 상속받는 자식클래스는 반드시 부모 클래스의 추상 메서드를 구현해야 합니다.

한마디로 부모 클래스의 추상메서드를 상속받은 자식 클래스는 오버 라이딩을 해주어야 한다는 말이죠!!

추상 메서드 구현 방법

[구조]

abstract 리턴 타입 메서드명 ( );

추상메서드를 사용하려면 abstract라는 키워드를 사용해야합니다.

abstract라는 키워드로 아 이 메서드가 추상 메서드구나 라는걸 인지할 수 있는 것이죠

추가적으로 추상 메서드는 { } 이 생략이 가능합니다. 

 


추상 클래스란?

추상 메서드를 알았다면 추상 클래스를 이해하기에 쉽습니다.

추상 클래스란 추상 메서드를 멤버로 갖는 클래스를 추상 클래스라 합니다.

추상 클래스를 사용할 때 주의할 점

추상 클래스의 멤버에는 추상 메서드만 있는 것이 아닙니다.

일반 메서드도 존재할 수 있죠

하지만 중요한 점은 추상 메서드를 하나라도 포함되어있다면 해당 클래스는 추상 클래스가 됩니다.

그리고 가장 중요한 점은 추상 클래스는 객체를 생성할 수 없습니다.

추상 클래스의 구조

[구조]

abstract class 클래스명{
		abstract 리턴타입 메서드명();
}

추상 클래스 또한 클래스명 앞에 abstract라는 키워드가 와주어야 합니다.

추상 클래스의 사용목적

그렇다면 추상 클래스는 왜 사용하는 걸까요 그냥 껍데기 같은 느낌인데?

추상 클래스는 구현은 자식 클래스가 하고 부모의 클래스에서는 기능을 비워놓고 싶을 때 사용합니다.

추상 클래스 예시 코드

Main

public class Ex1 {

	public static void main(String[] args) {
			Pokemon pokemon= new Pikachu();
			System.out.println("이 포켓몬은"+pokemon.getName());
			pokemon.attack();
			pokemon.sound();
			
			pokemon=new Squirtle();
			System.out.println("이 포켓몬은"+pokemon.getName());
			pokemon.attack();
			pokemon.sound();
		
	}

추상 클래스(부모)

abstract class Pokemon{
	String name;
	abstract void attack();
	abstract void sound();
	public String getName() {
		return this.name;
	}
}

abstract void attack();
abstract void sound(); 

attack( )라는 메서드와 sound( )라는 메서드를 추상 메서드로 만들어 놨습니다. 이렇게 되면 자식클래스가 상속을 받게 되면 위의 두 메서드는 필히 재정의를 해주어야 합니다.

자식 클래스

class Pikachu extends Pokemon{
	Pikachu(){
		this.name="피카츄";
	}

	@Override
	void attack() {
			System.out.println("전기공격");
	}

	@Override
	void sound() {
			System.out.println("피카피카");
	}
	
}
class Pikachu extends Pokemon{
	Pikachu(){
		this.name="피카츄";
	}

	@Override
	void attack() {
			System.out.println("전기공격");
	}

	@Override
	void sound() {
			System.out.println("피카피카");
	}
	
}

자식 클래스에서 부모 클래스의 추상 메서드인 attack( ), sound( ) 메서드를 재정의 해주었습니다.

출력 결과

자식 메서드에서 오버 라이딩 해준 추상 메서드가 잘 출력되는 것을 볼 수 있습니다!

이상으로 포스팅 마치겠습니다.

글 읽어주셔서 감사합니다~

Comments