다형성 인수
자식 클래스마다 다른 타입으로 메서드를 지정하는 방법-> 자식 클래스 수 만큼 메서드가 늘어나는 문제가 발생.
-> 부모 타입으로 지정하여 하나의 타입(부모타입)으로 여러 가지 타입을 받을 수 있다.
instanceof
타입 확인 연산자. return type: blooean
조건문으로 걸러주지 않으면 유효하지 않은 타입 접근시 ClassCastException error 발생
다형성 배열(상위타입배열)
동일 타입만 저장 가능한 배열에 부모타입을 지정하여 서로 다른 타입을 저장할 수 있다.
다형성의 4가지 전제조건
다형성의 보장
상위 클래스에서 명령하면 하위 클래스에서 반드시 응답(동작)해야한다.
딱히 하위 클래스에서 모든 클래스에 대해 무조건 override를 할 의무는 없기에 재정의를 하지 않아도 에러는 발생하지 않음. 하지만 꼭 재정의가 필요한 경우 재정의를 강제할 방법이 필요.
추상메서드
메서드의 구현부(body)가 없는 메서드. abstract
불완전한 메서드.
추상클래스
불완전한 클래스.
다형성을 일부 보장하기 위한 목적. 서로 비슷한 클래스의 공통부분을 묶을 때 사용.
상위클래스에서 사용. 단독 객체 생성 불가.
구현된 메서드를 가질 수 있다.
하위 클래스가 상속받은 상위 클래스 내의 추상메서드를 재정의하도록 함(하지 않을 시 에러)
인터페이스
서로 다른 동작의 클래스도 공통 기능을 정의해 상속구조도 사용 가능할까?
추상메서드로만 이루어진 클래스.
인터페이스 클래스- interface. 하위클래스-implements
단독 객체 생성 불가. 상위클래스로서 사용. 구현메서드 가질 수 없음(추상메서드, final static 상수만 가능)
abstract 생략 가능.
final static
한 번 결정한 값을 수정할 수 없음
public final static int MINNUM = value;
인터페이스와 다중상속
자바는 기본적으로 단일상속 언어이다.
추상클래스를 extend하고 필요한 인터페이스만 implements해 사용할 수 있다.
public class Dog extends Animal implements Pet, Play{}
인터페이스가 인터페이스를 상속할 수 있다.
추상클래스와 인터페이스
Object
클래스 생성 시 생략되어 자동으로 extends 되는 클래스.
(java.lang.Object)
Object class의 toString
객체의 주소를 문자열로 출력.
값을 출력하고 싶다면 override 하면 됨
super.toString()
재정의 후 상위 클래스의 toString 호출