1. 다형성(polymorphism)
* 다형성
- '여러 가지 형태를 가질 수 있는 능력'의미
- 한 타입의 차조변수로 여러 타입의 객체를 참조할 수 있다.
- 조상클래스 타입의 참조변수로 자손클래스의 인스턴스를참조할 수 있다.
- 타입이 같은 인스턴스는 참조변수의 타입에 따라 사용할 수 있는 멤버의 개수가 달라진다.
- 조상 인스턴스의 멤버 개수는 자손 인스턴스의 멤버 개수보다 항상 적거나 같다.
- 조상 타입의 참조변수로 자손타입은 인스턴스를 참조할수 있다.
- 반대) 자손 타입의 참조변수로 조상타입의 인스턴스를 참조할 수 X
* 참조변수 형변환
- 자손타입 --> 조상타입 (Up-casting) : 형변환 생략가능
- 자손타입 <-- 조상타입 (Down-casting) : 형변환 생략불가
- Object 타입의 참조변수로 형변환 하는 것은 참조변수가 다룰 수 있는 멤버의 개수가 실제 인스턴스가 갖고 있는 멤버의 개수보다 적을 것이 분명하므로 문제가 되지 X
- 형변환은 참조변수의 타입을 변환하는 것이지 인스턴스를 변환하는것이 아니기 때문에 참조변수의 형변환은 인스턴스에 아무런 영향이 X
- 참조하고 있는 인스턴스에서 사용할 수 있는 멤버의 범위(개수)를 조절한다.
- 참조변수를 가리키는 인스턴스의 자손타입으로 형변환은 허용되지 X
- 참조변수가 가리키는 인스턴스의 타입이 무엇인지 중요!!!!!!
* instanceof 연산자
- 어떤 타입에 대한 instanceof연산의 결과가 true라는 것은 검사한 타입으로 형변환이 가능하다는 뜻
* 참조변수와 인스턴스의 연결
- static메서드는 static변수처럼 참조변수의 타입에 영향을 받는다.
- 참조변수의 타입에 영향을 받지않는 것은 인스턴스메서드 뿐이다.
- static메서드는 반드시 참조변수가 아닌 '클레스.메서드()'로 호출
2. 추상클레스(abstract class)
* 추상클레스
- '미완성 설계도' 완성되지 못한 설계도
- 미완성 메서드(추상메서드)를 포함
- 인스턴스를 생성 X
- 상속을 통해서 자손클래스에 의해서만 완성될 수 있다.
abstract class 클래스이름 { ... }
- 추상메서드를 포함하고 있지 않은 클래스에도 'abstract'를 붙여서 추상클래스로 지정
- 추상메서드가 없는 완성된 클래스라도 추상클래스로 지정되면 클래스의 인스턴스를 생성할 수 X
* 추상메서드(abstract method)
- 선언부와 구현부로 구성
- 선언부만 작성하고 구현부는 작성하지 않은 채로 남겨둔것
- 설계만 해 놓고 실제 수행될 내용은 작성하지 않은 것
abstract 리턴타입 메서드이름();

* 추상클래스의 작성
- 여러 클래스에 공통적으로 사용될 수 있는 클래스를 바로 작성하기도 하고, 기존의 클래스의 공통적인 부분을 뽑아서 추상클래스로 만들어 상속하는 경우도 있다.
- 클래스의 공통 부분을 뽑아서 조상클래스를 만드는 것
상속계층도를 따라 내려 갈수록 세분화 되며, 올라갈수록 공통요소만 남게 된다.
추상화 - 클래스간의 공통점을 찾아내서 공통의 조상을 만드는 작업
구체화 - 상속을 통해 클래스를 구현, 확장하는 작업