『 추상화 』
- 클래스간의 공통점을 찾아내 공통의 조상을 만드는 작업
- 상속 계층도를 따라 올라갈수록 클래스의 추상화는 더욱 심화됨
ex ) 게임을 예로 들어, 직업 - 전사분류 - 용기사 용기사는 직업으로 추상화 될 수 있음.
『 구체화 』
- 상속을 통해 클래스를 구체화 함
『 추상 메서드 』
- 선언되어 있으나 구현되어 있지 않은 메서드
- abstract 키워드로 선언
- public abstract int getValue(); //접근제한자 옆에 쓰이며, 메서드명 안에 입력 자료형이 없다.
- 바디로 특정화를 시킬 수 없다 ( {}로 바디를 만들수 없음 }
이것은 몸체만 제공 하므로 무엇이든 생각해볼 수 있게 하는것이다.
- 추상 메서드는 서브 클래스에서 오버라이딩하여 구현
예를들어, 위의 public abstract int getValue(); 를 오버라이딩해서 구현해야 한다.
『 추상 클래스 』
- 추상 메서드를 하나라도 가진 클래스
- 클래스 앞에 반드시 abstract 키워드를 선언해야 함.
『 추상 클래스의 특징 』
- 객체를 생성할 수 없다. (new 생성자(); 불가능) [구현되지 않은 클래스이기 때문에]
필요성: 상속관계에서 추상클래스가 가지고 있는 추상메서드를 서브클래스가 반드시 구현해야 함을 알릴 때 (강제성)
설계와 구현 분리 : 슈퍼 클래스에서는 개념적 특징을 정의하고
서브클래스에서 구체적 행위를 구현.
추상 클래스는 다음과 같이 파일위에 A 아이콘이 표기된다.
-추상 메서드는 몸체를 가질 수 없지만, 추상 클래스는 몸체를 가진 메서드를 만들 수 있다.
-그러니까, 추상 메서드가 아닌 일반 메서드를 사용 할 수 있다.
추상 클래스는 인스턴스화 시킬 수 없다.
생성자의 선언은 가능하지만, 객체 생성은 불가능하다.
세개의 고용 클래스를 추상화 하기위해 하나의 추상화 클래스를 생성하였다.
필드에 공통된 변수가 있을 경우, 서브 클래스에서 이것을 지우고
생성자에 this 를 통해서 생성 가능하다, 왜냐하면 extends로 부모 클래스를 타고 올라가 그 변수가 있을경우에
그것을 인식하기 때문이다.