일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 패스트캠퍼스
- 소셜로그인
- 쿼리
- MySQL
- Spring
- ApplicationContext
- RDBMS
- 국비지원
- SpringFramework
- 자바의정석
- 클린빌드
- Oracle
- 오라클
- 기초쿼리
- 패캠
- mariadb
- 자바기초
- devcamp
- oauth
- 남궁성
- 스프링
- 불친절한SQL
- 인프런
- 자바문제
- 자바연습문제
- SQL
- cleanbuild
- 자바
- Today
- Total
Darren's Devlog
[자바의정석] 객체지향 다형성, 참조변수 이해하기 본문
네이버 블로그에서 티스토리로 이전하는 중입니다.
https://blog.naver.com/darren_gwon/222641453763
안녕하세요.
2021년 7월 27일에 공부하면서 정리했던 다형성 내용을 블로그에 옮겨봅니다.
그때 당시에 자바의정석 챕터9의 equals()의 오버라이딩 강의를 듣던 중
다형성 설명이 한번에 이해가 안돼서 시간을 내서 남궁성 선생님께서 말씀해주신대로
코드의 진행 과정을 그림으로 그려봤었습니다.
객체지향 개념을 공부하시는 다른 분들에게도 도움이 될까 싶어 블로그에도 공유를 합니다.
class Person {
long id;
public boolean equals(Object obj) {
if(obj instanceof Person)
return id==((Person)obj).id;
else
return false;
}
Person(long id) {
this.id = id;
}
}
class Ex9_2 {
public static void main(String[] args) {
Person p1 = new Person(8011081111222L);
Person p2 = new Person(8011081111222L);
if (p1.equals(p2)){
System.out.println("p1과 p2는 같은 사람입니다.");
else
System.out.println("p1과 p2는 다른 사람입니다.");
}
}
출처: 자바의정석 3판 p.452 예제 9-2
Person p1 = new Person(8011081111222L);
Person p2 = new Person(8011081111222L);

if (p1.equals(p2)){
System.out.println("p1과 p2는 같은 사람입니다.");
else
System.out.println("p1과 p2는 다른 사람입니다.");
}

p1.equals()의 매개변수로 p2 인스턴스의 주소가 대입이 됩니다.
매개변수의 타입이 Object인데 Person객체가 대입이 가능한 이유는
Object클래스는 모든 클래스의 최고 조상이기 때문입니다.
조상클래스 타입의 참조변수로 자손클래스의 인스턴스를 참조할 수 있도록 한 것이 다형성입니다.
사진과 같이 obj와 p2는 같은 객체를 가르키게 됩니다.

Object obj와 Person p2는 같은 객체(0x200)를 가르키고 있지만
인스턴스변수 id는 사용할 수가 없습니다.
인스턴스 변수id는 Object클래스에 정의된 멤버가 아니기 때문입니다.
그렇기 때문에 obj를 먼저 Person객체로 형변환을 한 후에 id를 참조할 수 있습니다.
((Person) obj) 코드에 의해 Object obj -> Person obj로 변환이 된 것입니다.

다형성 관련 궁금하신거 있으시면 댓글 남겨주세요~