다형성
- 같은 타입이지만 실행 결과가 다양한 객체를 이용할 수 있는 성질. 코드 측면에서 보면 하나의 타입에 여러 객체를 대입함으로써 다양한 기능 이용할 수 있게 해줌
-부모 클래스로 타입 변환 가능 -> 부모 타입에 모든 자식 객체가 대입 될 수 있음
ex) public class car { //Tire : 부모 클래스
Tire t1 = new Hankook(); //자식 타입이 부모 타입으로 자동 타입 변환
Tire t2 = new Kumho();
}
- 타입 변환 : 데이터 타입을 다른 데이터 타입으로 변환하는 행위, 자식 타입은 부모 타입으로 자동 타입 변환이 가능
- 자동 타입 변환 : 프로그램 실행 도중에 자동적으로 타입 변환이 일어나는 것
부모 클래스 변수 = 자식 클래스 타입();
-> 자식은 부모의 특징과 기능 상속받기 때문에 부모와 동일하게 취급될 수 있
ex) Cat cat = new Cat(); Animal animal = cat; -> Animal animal = new Cat();
이렇게 부모 타입으로 자동 타입 변환되면 부모 클래스에 선언된 필드와 메소드만 접근 가능
but, 메소드가 자식 클래스에서 오버라이딩되었다면, 자식 클래스의 메소드가 대신 호출 --> 다형성과 관련
- 강제 타입 변환(casting) : 부모 타입을 자식 타입으로 변환하는 것. 자식 타입이 부모 타입으로 자동 변환 후, 다시 자식 타입으로 변환할 대 강제 타입 변환 사용
ex) Parent parent = new Child();
Child child = (Child) parent;
- 객체 타입 확인(instanceof) : 좌항은 객체가 오고 우항은 타입이 옴, 자항의 객체가 우항의 인스턴스이면/우항타입으로 객체 생성된다면 true, 아니면 false. 주로 매개값의 타입 조사할 때 사용
ex) boolean result = 좌항(객체) instanceof 우항(타입)
- 실체 클래스 : 객체를 직접 생성할 수 있는 클래스
- 추상(abstract) 클래스 : 실체 간에 공통되는 특성 추출. 클래스들의 공통된 특성을 추출해서 선언한 클래스
객체를 직접 생성해서 사용할 수 없음
1. 실체 클래스들의 공통된 필드와 메소드의 이름을 통일할 목적
2. 실체 클래스를 작성할 때 시간을 절약
- 추상 클래스 선언 : public abstract class 클래스 {}
일반 클래스처럼 필드, 생성자, 메소드 선언 가능
- 추상 메소드 : 추상 클래스에서만 선언 가능, 선언부만 있고 {} 없는 형태 -> 자식 클래스는 반드시 추상 메소드를 재정의해서 실행 내용 작성해야함
'JAVA' 카테고리의 다른 글
배열 예제_2차원 배열 (0) | 2019.06.18 |
---|---|
배열 예제_숫자 출력 (0) | 2019.06.18 |
상속_1(상속, override, final) (0) | 2019.06.18 |
클래스_5(패키지) (0) | 2019.06.18 |
클래스 예제_계산기 (0) | 2019.06.18 |