1.추상(부모) 클래스는 다른(자식) 클래스들의 공통적인 특징을 변수나 메소드로 정의만 해 놓은 것을 말한다. ➡️ 추상 메소드
2. abstract를 앞에 붙이고 클래스 안에 추상 메소드를 포함하고 있다는 것을 제외하면 사실 일반 클래스와 별반 차이가 없다.
3. Field, Constructor, Method(추상 메소드 말고 일반 메소드)도 포함할 수 있다.
4. 메소드 선언만 있고 구체적인 내용은 없으므로 객체를 생성할 수 없다.
5. 따라서, 부모 클래스로서의 역할은 하지만, 구체적인 사용은 상속받은 자식 클래스에서 재정의(오버라이딩)하여 사용해야 한다. ➡️ 강제성
6. 추상 클래스에서 선언만 해놓음으로써 이후 새로운(자식) 클래스들이 이를 상속 받아 구현하므로 새로운 클래스를 작성할 때 하나의 틀이 된다.
- 추상 메소드를 하나라도 가지고 있다면 그 클래스는 abstract를 붙여줘야 한다.
abstract class Animal {
// 구체적인 내용은 작성하지 않고 공통적인 특징을 추상적으로 선언 --> 리턴값 조차도 없이 메소드명만 선언
abstract void cry();
}
class Dog extends Animal {
void cry() {System.out.println("멍멍~");}
}
class Cat extends Animal {
void cry() {System.out.println("야옹야옹~");}
}
class Cow extends Animal {
void cry() {System.out.println("음메~");}
}
Public class Java100_oop_AbstractClassMethod {
public static void main(String[] args) {
//[1]: 추상 클래스는 구체적인 내용이 없기 때문에 객체를 생성할 수 없다.
// [2]: 추상 클래스 사용은? --> 상속을 받아서 사용.
// 즉, 추상 (부모)클래스를 상속받은 자식 클래스에서 해당 메소드를 오버라이딩하여 재정의한 후 사용한다.
Dog dog = new Dog();
dog.cry(); // -- 멍멍
Cat cat = new Cat();
cat.cry; // --야옹야옹
Cow cow = new Cow();
cow.cry(); // -- 음메~
}
}