[Java/자바]추상 메서드와 추상 클래스
안녕하세요 오늘은 자바에서의 추상 메서드와 추상 클래스에 대해 알아보겠습니다!
추상 메서드란?
추상 메서드 선언 부만 정의하고 구체적인 내용은 비워 놓은 메서드를 말합니다.
추상 메서드를 사용할 때 주의할 점
추상 메서드가 있는 클래스를 상속받는 자식클래스는 반드시 부모 클래스의 추상 메서드를 구현해야 합니다.
한마디로 부모 클래스의 추상메서드를 상속받은 자식 클래스는 오버 라이딩을 해주어야 한다는 말이죠!!
추상 메서드 구현 방법
[구조]
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( ) 메서드를 재정의 해주었습니다.
출력 결과
자식 메서드에서 오버 라이딩 해준 추상 메서드가 잘 출력되는 것을 볼 수 있습니다!
이상으로 포스팅 마치겠습니다.
글 읽어주셔서 감사합니다~
