추상 클래스의 특징
1.추상 메소드를 1개 이상 가지고 있다면 반드시 추상 클래스가 되어야한다.
2.추상 클래스는 객체를 생성할 수 없다.
3.추상 클래스를 상속받는 순간 반드시 추상 클래스 안에 있는 method를 재구현(재정의) 즉, 오버라이딩 하거나, 자식 클래스또한 추상 클래스가 되어야 한다.
상속과 다른점은 추상화를 했기 때문에 그것을 그대로 따라서 만들어 구현(implement)해야지만 오류가 안 뜬다.
이때 getter setter method 처럼 손 쉽게 override나 implement를 할 수 있다. (alt+ shift+ s)
교재 290page 참조
animalclass 오리 = new Duckclass();
animalclass 개 = new Dogclass();
animalclass 고양이 = new Catclass();
animalclass 소 = new Cowclass();
ArrayList<superclass> animalList = new ArrayList<superclass>();
animalList.add(c1);
animalList.add(c2);
animalList.add(c3);
animalList.add(c4);
for(int i =0; i<list.size();i++) {
// 각 객체마다 소리를 내는 method를 호출
list.get(i).makeSound();
}
#result
## 꽥꽥
## 멍멍
## 야옹
## 무우~
소.우유짜기()
# result
## error 발생
// 아래 코드로 인하여
animalclass 젖소 = (Cowclass)소;
// 아래 method를 활용하기 위해
젖소.우유짜기()
down casting을 쓰는 이유는 앞서 언급했듯 upcasting이 되어 쓰지 못하는 subclass만의 강점을 살리기 위해 upcasting이 되어있던 객체를 다시 downcasting하여 쓸 수 있다.
따라서 down casting은 반드시 upcasting이 선행되어야 쓸 수 있다는 것을 할 수 있다.
교재(271page)