추상 클래스
추상.. "어떤 대상 혹은 세계로부터 하나의 상을 추려내어 표현하는 것을 의미한다"고 한다.
새, 곤충, 물고기 —공통된 특성→ 동물
삼성, 현대, LG —공통된 특성→ 회사
Bird.class, Insect.class, Fish.class(실체 클래스) -→ Animal.class(추상 클래스) 추상 클래스는 실체 클래스의 공통되는 필드와 메소드를 추출해서 만들었기 때문에 객체를 생성x
추상 클래스를 만드는 이유는 뭘까?
- 실체 클래스들의 공통된 필드와 메소드의 이름을 통일할 목적 Bird.class, Insect.class를 다른 사람이 정의한다고 하면... 누구는 무언가 먹는 행위를 지정하는 메서드를 eat()으로 쓰고, 누군가는 eatting()으로 쓸 수 있다. 동일한 데이터와 기능인데 이름이 다르니, 사용 방법이 달라질 수 있다.
- 실체 클래스를 작성할 때 시간 절약 공통적인 필드와 메소드는 Animal.class에서 선언해두면 실체 클래스를 작성하는데 시간을 절약할 수 있다.
여기서 초록색 원을 타이어 추상 클래스, 검은색 원을 실체 클래스라고 볼 수 있다.
추상 클래스와 추상 메소드
abstract 키워드를 이용한다.
public abstract class 클래스{
//필드
//생성자
//메소드
}
추상 클래스는 추상 메소드를 선언할 수 있다. 하위 클래스가 반드시!! 내용을 채우도록 하고 싶은 메소드가 있으면 추상 메소드를 지정하게 된다.
음식점 본사에서는 "이러한 메뉴은 꼭 있어야 한다." 라고 규칙을 정했고, 체인점에서는 "알겠다." 하고 그 메뉴 그대로 판매를 했다. 손님에게 메뉴판을 보여주었을 때 체인점 지점장은 놀랬다. 모든 메뉴들이 0원으로 되어있기 때문이다. 아래에 있는 예제를 실행해보면 모든 메뉴가 전부 0원이라며 본사의 문구가 찍혀있는 것을 볼 수 있다. 본사에서 "꼭 너희가 원하는 메뉴 가격을 다시 정해라"라는 주의사항을 알려주지 않았기 때문에 발생한 것이다. 이럴 때 "꼭!!! 너희가 다시 정의해"라는 주의 메세지를 주는 것이 "추상 클래스의 역할"이다. 출처: https://server-engineer.tistory.com/74 [HelloWorld]
public abstract class Animal{
public String kind;
public void breathe(){
System.out.println("숨을 쉽니다.");
}
public abstract void sound(); // <-- 추상 메소드
}
추상 메소드가 하나로 있으면 추상 클래스이다.
public class Dog extends Animail{
public Dog() {
this.kind = "포유류";
}
@Override
public void sound(){
System.out.println("멍멍"); // 추상 메소드 재정의
}
}
만약 @Override해서 재 정의한 sound()를 쓰지 않는다면? 에러 난다. 무조건 이 메소드는 재 정의해서 써라-_-! 할 때 추상 클래스를 쓴다.
반응형
'Java' 카테고리의 다른 글
어노테이션(Annotation) (0) | 2021.03.11 |
---|---|
static과 싱글톤 (0) | 2021.03.11 |
상속 : 타입 변환과 다형성 (0) | 2021.03.07 |
상속 : Protected 접근 제한자 (0) | 2021.03.07 |
상속 : final 클래스와 final 메소드 (0) | 2021.03.07 |
Uploaded by Notion2Tistory v1.1.0