다형성 / 추상화
# 다형성
* 참조변수의 타입변환 : 사용할 수 있는 멤버의 개수를 조절하는 것
1. 서로 상속관계에 있는 상위 클래스 - 하위 클래스 사이에만 타입 변환이 가능
2. 하위 클래스 타입에서 상위 클래스 타입으로의 타입 변환(업캐스팅)은 형변환 연산자(괄호)를 생략할 수 있다.
3. 반대로 상위 클래스에서 하위 클래스 타입으로 변환(다운캐스팅)은 형변환 연산자(괄호)를 반드시 명시
* 참조_변수 instanceof 타입
- 리턴값이 true가 나오면 타입변환 가능 false면 불가능
- ex) Animal cat = new Cat();
System.out.println(cat instanceof Object); //true
# 추상화 : 공통점을 뽑아서 외부로 추출 // abstract / interface
* abstract
- 추상클래스 : 클래스의 공통된기능을 모아서 상속을 해줄 필요가 있지만 스스로 인스턴스화를 못함
- 추상 메서드 : 추상클래스는 추상 메서드를 가질 수 있음 // 기능구현은 상속받은 이후 오버라이딩 해서 재정의!! <-- 클래스마다 다른 기능구현 가능
- 추상 메서드를 하나 이상 포함해야함
* interface : (implements)
- 인터페이스는 강제로 @override 해줘야함
- 공통적으로 구현해야할 핵심기능을 정의할때 사용하는듯?
- 추상메서드와 상수만을 멤버로 가질 수 있다.
- 상수를 정의할 때 public static final을 생략할 수 있음 // 자동으로 내부 모든필드 public static final로 정의
-
* abstract 와 interface차이
- abstract는 필요한 것만 추상메서드로 만들고 interface는 안에있는 모든 내용을 재정의하여 구현해야함
- 추상클래스 다중상속 불가능 / 인터페이스는 다중적 구현 가능