- 객체들의 공통된 개념만을 표현하기 위한 클래스가 추상클래스
- 작업의 레벨 분할을 위해서 사용
- 부모가 난 정의를 못내리것다 하면 정의를 안하고 자식에게 시키는것 이게 abstract
- 추상메서드(메서드의 body가없는 메서드)
- 반드시 상속받은 하위클래스에서 구현해야한다(body를 만들어야한다)
- 반드시 상속받은 하위클래스에서 재정의를 해야한다.
- 불안전한 메서드=깡통
- 추상메서드를 한개라도 포함한다면 추상클래스가된다
- 추상클래스는 50%구현 /50% 설계,디자인 할때사용
- 다형성을 일부 보장하기위해서 사용
- 자식은 반드시 재정의를 해야하기때문 강제성과 통일성이있다.
- 추상클래스는 기능이 비슷한 클래스들의 공통적인 특징을 묶을때 사용
- abstract는객체를 생성할수 없다 (new 못한다)
- 부모클래스로 자식클래스를 가리킬수있다 (upcasting)
- 추상메서드가 없어도 추상클래스를 만들수있다.
- 객체지향에서 다형성을 보장하기위해서 등장한것은?추상클래스,인터페이스
1. Animal.java
//추상메스드는 (); { } body가없다 { } body 부분은 반드시 자식들이 구현해야한다.
//추상클래스는 기능이 비슷한 클래스들의 공통적인 특징을 묶을때 사용
package com.tistory.edkoon.smp2;
public abstract class Animal { // 추상클래스
public abstract void eat(); // 추상메소드
@Override
public void eat() {
System.out.println("강아지가 멍!멍!멍!");
}
}
3. Cat.java
package com.tistory.edkoon.smp2;
public class Cat extends Animal {
@Override
public void eat() {
System.out.println("고양이가 냐옹냐옹!");
}
}
4. ZooMain.java
package com.tistory.edkoon.smp2;
public class ZooMain {
public static void main(String[] arg){
//Cannot instantiate the type Animal [추상클래스는 new 객체로 생성을 하지 못한다 ]
//Animal a = new Animal();
// upcasting으로 객체를 생성
Animal c = new Cat();
c.eat(); //자식 <= 반드시 재정의된 메소드
c.move();//부모