casting(강제형변환)의 정의
- 부모 자식 클래스 간에 사용 가능
- 자식 클래스타입 변수이름(인스턴스명) = (자식클래스타입) 부모 인스턴스; 형식
- ex) Student s = (Student) p;
- 힙메모리 관점에서 보면,
- p는 힙 메모리에 원래 자식 인스턴스와 부모인스턴스가 존재, 형변환에 의해서 부모 인스턴스만 사용하는 경우
- s로 강제형변환(casting)하면, 부모인스턴스 뿐만 아니라, 힙메모리에 있는 자식 인스턴스도 사용
다형성(polymorphism)
- 다형성(polymorphism)은 class promotion과 method override의 결합
다향성(Polymorphism)의 조건
- promotion 발생하면
- 부모인스턴스 = 자식인스턴스
ex) Parent parent = child;
- 부모 메소드를 자식 메소드에서 override한 경우만 해당함.
- 자동형변환과 overrid 모두 충족 될 때, 부모 메소드를 실행하는 것이 아니라, override된 자식 메소드를 실행함.
polymorphism 사용 방법
- 부모 자식 클래스 만들고 method override 시킴.
- 부모로 promotion시켜서 override된 method위주로 코딩함.
polymorphism 사용 목적
- 소스코드를 재사용하기 위해서 사용함.
- 소스코드를 수정할 경우에 수정 최소화 할 수 있음.
instanceof 사용 문법
- if (
A instanceof B
)
- A
는 참조변수명(인스턴스) B
는 검사할 클래스명
A변수
의 힙메모리에 B클래스
의 인스턴스가 있으면 true return, 없으면 false return
-true 이면, 검사한 타입으로 형변환이 가능하다는 의미.
!!! : casting(강제형변환) 할 때, 반스시 instanceof
를 사용하여 강제형변환 가능한지 확인하세요.
추상클래스(abstract)
추상클래스(abstract)란?
- 실체 클래스들의 공통되는 필드와 메소드를 정의한 클래스
- 추상 클래스는 실제 클래스의 부모 클래스 역할을 함.
- class가 추상클래스로 선언되면 추상클래스를 직접 new를 사용하여 인스턴스 생성 불가
- 추상 클래스를 선언하려면,
- 추상클래스를 부모로 한 자식 클래스를 new를 사용하여 인스턴스 만드는 것만 허용
- 추상 클래스 내부에 생서자는 있어야만 함
- 자식클래스를 통해 부모인 추상클래스를 힙메모리에 인스턴스로 생성 후,
- 부모 추상클래스의 생성자를 호출함.
추상클래스와 추상메소드를 사용하는 목적
- 실체 클래스의 공통된 필드와 메소드의 이름을 통일할 목적을 갖음.
- 실체 클래스의 설계자가 여러 사람일 경우에 필드와 메소드가 각기 다른 이름을 갖을 수 있기 때문에 사용함.
- 실체 클래스를 작성할 때 시간을 절약할 수 있음.
- 실체 클래스는 추가적인 필드와 메소드만 선언함.
- 실체 클래스 설계 규격을 만들고자 할 때
- 실체 클래스가 가져야 할 필드와 메소드를 추상 클래스에 미리 정의
- 실체 클래스는 추상 클래스를 무조건 상속 받아 작성
추상 클래스(Abstract Class) 선언
-
New 연산자로 객체 생성하지 못하고 상속 통해 자식 클래스만 생성 가능함.
-
public abstract class 클래스명
{ 필드, 생성자, 메소드} 형식
추상 메소드 오버라이딩
- 추상 메소드는 메소드 이름은 동일하지만, 실행 내용이 실체 클래스마다 다른 메소드를 말함.
ex) 추상메소드 : 동물 , 실행 내용 : 울음소리, 종...
추상 메소드 오버라이딩 구현
- 부모 클래스를 추상 클래스로 선언하고 추상메소드를 정의함.
- 부모 추상 클래스가 마치 설계도만 주는 효과가 생김
- 자식 클래스에서 메소드의 실행 내용 오버라이딩(overriding) 작성함.
- 실제 구현 책임은 자식 클래스에게 존재함
- 실제 사용할 때, 자식 클래스를 인스턴스로 만들어 polymophism 개념으로 사용함.