추상클래스
추상메서드
public void todo() { ←헤더(무엇을 하는지) ← How 어떻게 하는지 } ``
abstract class Some { // 추상클래스 } abstract public void todo(); // 추상메서드
shape
+getArea(): int
개념상으로만 존재함
+abstract getArea():int
이렇게 사용 가능
추상클래스 만드는 법
abstract
class
클래스_이름
{ }
추상메서드 만드는 법
접근 제한자
abstract
반환 타입
메서드이름(매개변수)
;
추상화: 클래스간의 공통점을 찾아내서 공통의 클래스를 만드는 것 (추상 클래스)
구체화: 상속을 통해 클래스를 구현, 확장하는 작업 (상속)
- public > protected > default > private
왼쪽에서 오른쪽으로 갈수록 해당 변수나 메소드(함수) 등에 대한 접근이 어렵게 된다.
결국, main() 메소드가 어디에 있는지 JVM(Java Virtual Machine)이 접근하는데 제한이 없어야 하기 때문에 public을 접근 제어자로 선언하는 것이다.
해당 클래스 혹은 서브클래스의 인스턴스(객체)에서만 접근이 가능하다.
단, 서브클래스에서 protected로 된 값을 public으로 오버라이딩한다면
해당 값은 public으로 취급된다.
//프렌차이즈
abstract class JavaBurger { //추상클래스
// 오버라이드 금지(final void), 순서를 바꿀 수 없음, 완벽하게 만들어놨으니 더 이상 상속금지
// 하위클래스는 건들일수 없음
public final void welcome(){
greeting();
order();
serve();
sayGoodbye();
}
//추상메서드
protected abstract void greeting(); // 인사만 수정 가능
private void order(){
System.out.println("자바버거의 메뉴를 보여주고 주문을 받는다.");
}
private void serve(){
System.out.println("주문한 자바버거를 서빙한다.");
}
private void sayGoodBye(){
System.out.println("안녕히 가세요~ 자바버거에 또 오세요~");
}
}
class JavaBurgerBusan extends JavaBurger {
@Override
public void greeting(){
System.out.pritnln("어서오이소~ 자바버거입니더~");
}
}
class JavaBurgerSeoul extends JavaBurger {
@Override
public void greeting(){
System.out.println("어서오세요~ 자바버거입니다~");
}
}
class JavaBurgerJeju extends JavaBurger {
@Override
public void gretting(){
System.out.println("혼저옵서예~ 자바버거입니다~");
}
}
class Ex2 {
public static void main(String[] args) {
}
}
추상클래스를 쓰면 무엇을 하는가(표기)가 전부 통일이 됨
오버라이드하면 강제할 수 있음
상위개념을 표현하기 위해서, 상위개념에서는 구체적인 기능을 정의하는게
힘든 경우가 많아서 추상메서드를 만들고 거기에 추상클래스가 따라 옴
추상클래스는 추상 메소드가 아닌 일반 메소드를 가질 수 있는가?
가질수 있다. 그 외에도 멤버변수, 생성자도 가질 수 있음
추상클래스만으로 객체를 생성할 수 있는가?
없다. 존재하는 이유는 하위클래스를 위해서
has-a
- association 멤버변수냐 아니냐
aggregation 종합
orcomposition 구성
- HAS-A 관계에서는 상속을 사용하지않음, 수업시간에서는 그냥 has-a 관계로 통일
is-a
- 상속
inheritance
상속은 IS-A관계에서 사용하는 것이 가장 효율적
IS-A 관계(is a relationship, inheritance)는
일반적인 개념과 구체적인 개념의 관계
사람
은동물
이다.
소
는동물
이다
새
는동물
이다.
클래스다이어그램 만들때 사용하는 화살표들!