일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- java
- Stack
- database
- 코테
- Tree
- greedy
- Class
- array
- SQL
- hash table
- Data Structure
- Matrix
- Counting
- Binary Search
- 자바
- two pointers
- bit manipulation
- Number Theory
- dynamic programming
- Method
- Math
- 구현
- Binary Tree
- implement
- 코딩테스트
- geometry
- sorting
- string
- simulation
- 파이썬
- Today
- Total
코린이의 소소한 공부노트
다형성 본문
다형성은
- 여러 가지 형태를 가질 수 있는 능력으로,
- 자바에서는 조상 타입 참조변수로 자손 타입 객체를 다루는 것을 말한다.
class Parent {
int pi1; // 멤버 변수 2개
int pi2;
void pm1() { } // 메서드 3개
void pm2() { }
void pm3() { }
}
class Child extends Parent {
int ci; // 멤버 변수 1개
void cm() { } // 메서드 1개
}
// 메인 내부에서..
Parent p = new Parent(); // OK
Child c = new Child(); // OK
Parent pp = new Child(); // OK. WHY????
Parent 클래스가 있고, 이를 상속받은 Child 클래스가 있다. 두 클래스를 이용해 객체를 생성할 때 참조변수의 타입(왼쪽)과 객체의 타입(오른쪽)을 일치시켜서 객체 생성을 하는 게 일반적이었는데, 다형성은 불일치해도 객체 생성을 가능하게 해 준다.
객체와 참조변수의 타입이 일치할 때와 일치하지 않을 때 어떤 차이가 있는지 확인해보자.
1. 참조변수와 객체의 타입이 일치
Parent p = new Parent(); // OK
Child c = new Child(); // OK
참조변수의 타입과 객체의 타입이 일치하기 때문에, 참조변수로 접근할 수 있는 변수/메서드는 모두 객체에 있다. 따라서 에러 날 일이 없다.
2. 참조변수와 객체의 타입이 불일치
Parent pp = new Child(); // OK
1) 참조변수: 조상, 객체타입: 자손
- Parent 클래스의 멤버는 5개이고, Child 클래스의 멤버는 7개이다. 객체 생성 시 Child 클래스로 생성했기 때문에 객체에는 7개의 멤버가 있지만 참조변수는 Parent 클래스로 되어있기 때문에 접근 가능한 멤버는 5개뿐이다. 객체에 있는 나머지 2개(ci, cm)는 접근 불가능하지만 사용하지도 않으므로 에러가 발생하지는 않는다.
-> 다형성
Child cc = new Parent(); // error
2) 참조변수: 자손, 객체타입: 조상
- 참조변수의 멤버는 7개인데, 객체에는 5개의 멤버만 존재하기 때문에 실제로 사용할 수 없는 멤버가 2개(ci, cm)나 있다. 그렇기 때문에 에러가 발생한다
-> 자손 타입의 참조변수로 조상 타입의 객체를 가리킬 수 없다.
'Java' 카테고리의 다른 글
instanceof 연산자 (0) | 2022.05.03 |
---|---|
참조변수의 형변환 (0) | 2022.04.20 |
접근 제어자를 이용한 캡슐화 (0) | 2022.04.18 |
제어자 (0) | 2022.04.16 |
임포트와 스태틱 임포트 (0) | 2022.04.14 |