Java에서는 abstract 클래스명과 메서드명 옆에 붙임으로서 컴파일러에게 추상 클래스와 추상 메서드임을 알려준다.📘 클래스의 선언부에
abstract키워드가 있다는 말은 안에 추상 메서드(abstract method)가 있으니 상속을 통해서 구현해주라는 지침을 의미한다.
new 생성자를 통해 인스턴스 객체로 직접 만들 수 없다. abstract class Animal {
}
Animal a = new Animal(); // ERROR !!
abstract class Animal {
}
class Cat extends Animal {
}
public class Main {
public static void main(String[] args) {
Cat c = new Cat();
}
}
super() 메소드를 이용해 추상 클래스 생성자 호출이 가능하다.abstract class Animal {
public String name;
public Animal(String name) {
this.name = name;
}
public abstract void run();
}
class Cat extends Animal {
public Cat(String name){
super(name);
}
@Override
public void run() {
/* ... */
}
}
public class main {
public static void main(String[] args){
Cat cat = new Cat("콩물이");
cat.name; // 콩물이
}
}
class Cat {
void run() {}
void cry() {}
void grooming() {}
}
class Dog {
void run() {}
void cry() {}
void takeAWalk() {}
}
class abstract Animal {
void run();
void cry();
}
class Cat extends Animal {
void run(){
/* ... */
}
void cry(){
/* ... */
}
void grooming() {}
}
class Dog extends Animal {
void run(){
/* ... */
}
void cry(){
/* ... */
}
void takeAWalk() {}
}
💡 공통된 필드와 메서드를 통일하는 것은 일반 클래스로도 가능하기 때문에 추상 클래스만의 고유 용도라고 할 수는 없지만, 인터페이스(
Interface)와의 차이점을 이해하기 위해 알맞은 예제이다.
💡 인터페이스(interface)에도 동일하게 적용되는 특성이다.
출처