📕 3. 객체지향 상속
📄 4. 추상 클래스
1). 추상 클래스(abstract class)?
ⓐ 하나 이상의 추상 메소드를 포함하는 클래스를
클래스는 클래스인데..
추상클래스 그 자체로는 인스턴스를 만들 수 없는 미완성 클래스다.. 😶- 들어있는 추상 매서드도 미완성이다.(구현부가 없다)
오직 상속용으로, 파생클래스 만 쓸수 있는 미완성 클래스
- 오버라이딩하고 나서야 비로소 자식 클래스의 인스턴스를 생성할 수 있게 된다..
추상 클래스는 추상 메소드를 포함하고 있다는 점을 제외하면
일반 클래스와 모든 점이 같은것이,
생성자와 멤버변수, 일반 메소드도 포함할 수 있다.
ⓑ 생긴 모습
- 추상메소드가 하나 이상 포함되거나 abstract로 정의된 경우를 말합니다.
abstract class 클래스이름 { /*...*/ abstract 반환타입 메소드이름(); 선언부만 있고 구현부가 없다 /*...*/ }
2). 왜 쓰는건가?
꼭 필요한 매서드 이지만, 자손마다 다르게 구현될 수 있다는 점을 염두해 틀(Form)만 제공한다.
즉, 이름은 똑같은데 내용(돌아가는 알고리즘)이 달라야할때- 조상이 사용하던걸 써야 되는게 아니라 클래스 생성마다 거기에 맞는 함수를 만들어야 할때,
확장에 있어서 사용하는 틀(Form)을 만든다
- 절차
- 이 추상 클래스를 상속한다
- 확장할때 추상 메소드를 자식 클래스에서 반드시 오버라이딩을 통해 구체적으로 구현한다.
3). 예시
ⓐ 분명 Animal로 같고, cry()도 분명 똑같은데 다른 실행모습을 보여준다.
abstract class Animal { abstract void cry(); } class Cat : Animal { void cry() { System.out.println("냐옹냐옹!"); } } class Dog : Animal { void cry() { System.out.println("멍멍!"); } } public static void main(String[] args) { // Animal a = new Animal(); // 추상 클래스는 인스턴스를 생성할 수 없음. Animal c = new Cat(); Animal d = new Dog(); c.cry(); d.cry(); } >> 냐옹냐옹! >> 멍멍!
ⓑ 다형성을 응용해, 분명 똑같은 Attack()인데.
참고
'CS > SW 공학' 카테고리의 다른 글
| 니앙팽이 - 객체지향(OOP) | Extra | 응집도 결합도 (0) | 2023.02.01 |
---|---|
| 니앙팽이 - 객체지향(OOP) | 3-5 | 인터페이스 (0) | 2023.02.01 |
| 니앙팽이 - 객체지향(OOP) | 3-3 | 다형성 (0) | 2023.02.01 |
| 니앙팽이 - 객체지향(OOP) | 3-2 | 메소드 오버라이딩 (method overriding) (0) | 2023.02.01 |
| 니앙팽이 - 객체지향(OOP) | 3-1 | 상속 (0) | 2023.02.01 |