추상 메서드는 선언부만 정의하고 구체적인 내용은 비워놓은 메서드이다. 구체적인 내용을 적지 않았기 때문에 이를 상속받은 하위 클래스에서는 사용하려면 반드시 수현하라는 의미 이다. 추상 메서드를 선언하는 방법은 제어자 abstract
를 메서드명 앞에 붙여주면 된다. 그리고 구체적인 내용이 없으므로 괄호{}
를 생략하고 세미콜론을 붙여 준다.
abstract void methodA();
추상 클래스는 추상 메서드를 멤버로 가지는 클래스이다. 추상 클래스는 일반적인 메서드도 가질 수 있지만 추상 메서드를 하나라도 포함하는 클래스이다. 추상 클래스는 인스턴스를 생성할 수 없다. 그러므로 추상 크르래스는 그 자체로 사용되기보다는 자식 클래스를 완전하게 작성하기 위한 기본적인 틀로써 사용된다.
abstract class Cellphone{
abstract void methodA();
}
추상 클래스는 추상 메서드를 포함하기 때문에 이를 상속받은 자손 클래스는 반드시 추상 메서드를 구체적으로 작성해주어야된다. 추상 클래스를 선언하기 위해서는 앞에 제어자 abstract
를 붙여 선언한다. 내부에 추성 메서드가 있다면 반드시 클래스명 앞에 abstract
를 붙여야 한다.
abstract class Pokemon {
String name;
abstract void attack();
abstract void sound();
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
class Pikachu extends Pokemon {
Pikachu() {
this.name = "피카츄";
}
@Override
void attack() {
System.out.println("전기 공격");
}
@Override
void sound() {
System.out.println("피카 피카!");
}
}
class Squirtle extends Pokemon {
Squirtle() {
this.name = "꼬부기";
}
@Override
void attack() {
System.out.println("물 공격");
}
@Override
void sound() {
System.out.println("꼬북 꼬북!");
}
}
public class AbstractClass1 {
public static void main(String[] args) {
Pikachu pick = new Pikachu();
System.out.println("이 포켓몬은 "+pick.getName());
pick.attack();
pick.sound();
Squirtle squ = new Squirtle();
System.out.println("이 포켓몬은 "+squ.getName());
squ.attack();
squ.sound();
}
}