5. 다형성

Lumi·2021년 6월 22일
0

자바의 정석

목록 보기
23/35
post-thumbnail

1. 다형성이란

여러 가지 형태를 가질 수 있는 능력
조상클래스 타입의 참조변수로 자손클래스의 인스턴스를 참조할 수 있다

보통 인스턴스를 생성하면 인스턴스의 타입과 참조변수의 타입이 일치한다.
example : Tv[참조변수] t = new Tv()[인스턴스 변수];

하지만 상속관계에 있을경우에는
Tv t = new CaptionTv(); 로도 사용이 가능하다.

대신 이렇게 선언하게 된다면 Tv에 있는 메서드는 사용이 가능하지만 CaptionTv에 있는 메서드는 사용이 불가능하다.
-> 사용할수 있는 멤버의 개수가 다르기 떄문에

사용할수 있는 멤버의 변수는 참조 변수를 따라간다.

역은 성립하지 않는다.

2. 참조변수의 형변환

서로 상속관계에 있다면 클래스 사이에서도 형변환이 가능하다.

업캐스팅 : 자손타입 -> 조상타입 : 형변환 생략가능
다운 캐스팅 : 조상타입 -> 자손타입 : 형변환 생략 불가능

조상타입의 인스턴스를 자손타입의 참조변수로 참조하는것은 허용 불가!!

A = B
A를 기준으로 B의 값을 넣어준다.

3. instanceof연산자

참조변수가 참조하고 있는 인스턴스의 실제 타입을 알아보기 위해서 사용한다.
반환값이 boolean

참조변수 instanceof Class명
으로 사용

상속을 받은 클래스들은 모두 true가 나오게 된다.

4. 참조변수와 인스턴스의 연결

메서드의 경우 자손 클래스의 메서드가 우선시되어 사용.

멤버변수의 경우 참조변수의 변수가 사용된다.
example
A a = new B();
B b = new B();
-> A가 조상 클래스라면
1. a에서는 a의 멤버변수가 사용되고 b에서는 b의 멤버 변수가 사용된다.
2. a,b둘다 모두 b에있는 오버라이딩된 메서드가 사용된다.

5. 매개변수의 다형성

매개변수가 조상 클래스의 참조변수라는 것은 조상 클래스의 자손 클래스들을 매개변수로 받을수 있다는 것을 의미

그림에서 보이는 것처럼 void buy()의 메서드 안에 참조변수를 담게 되면
후에 자손 클래스를 매개변수로 받아 코드를 작성을 할수가 있다.

6. 여러종류의 객체를 배열로 다루기

5번에 나온 Tv외에도 다른 클래스들을 추가하여
Product타입의 참조변수 배열로 다룰수가 있다.


5번에 있는 코딩을 조금 수정한 코드이다.

Buyer에 item이라는 배열을 선언하여 장바구니 처럼 산 물품을 담고 후에 출력을 해주는 코드이다.

만약 toString을 오버라이딩 하지 않는다면 주소값이 나오기 때문에 반드시 해주어야 한다.

코딩이 좀더 익숙해진다면 배열에 있는 값을 뺴내어 반품 코딩도 작성이 가능하며

배열의 크기를 자동으로 늘려주는 Vector클래스를 사용할수도 있다.

profile
[기술 블로그가 아닌 하루하루 기록용 블로그]

0개의 댓글