본문 바로가기
Java (국비)/Java 메모

다형성 (다운캐스팅) 메모

by Hwanii_ 2023. 5. 25.
728x90
@Override
	public boolean equals(Object obj) {
		
		//	아이디(mid)가 같다면, 같은 객체 !
   
		MemberVO mVO = (MemberVO)obj;	
		if(this.mid.equals(mVO.mid)) {	
			return true;
		}
		return false;
	}

 

// Object 클래스의 참조변수 obj를 MemberVO 타입으로 다운캐스팅 하는 상황 이다.
// 아이디, 비번, 이름 다 받았지만, 아이디만 비교하게 ! 내 입맛대로 재정의.

// 내 아이디와 비교할 대상의 아이디를 비교한다.

// (다운캐스팅 한 obj(비교할 대상을 가리키는 변수)를 mVO 참조변수에 저장하여)

// (mVO.아이디)

// 맞으면 true

// 아니면 false

 

1. 최상위 클래스인 Object클래스 안의 equals 메서드를

MemberVO 클래스에서 사용하기 위해서 메서드를 오버라이드 하는 상황.

 

2. MemberVO 클래스는 하위클래스 이기 때문에,

obj를 MemberVO 타입으로 강제형변환을 할때 반드시 변수앞에 (타입) 을 표기해 줘야 한다.

(Object 타입의 obj는 비교의 대상이 되는 변수명 이다)

 

3. 상위클래스의 참조변수가 하위클래스의 타입으로 가는것은

하위클래스가 가지고있는 멤버변수 또는 메서드를 사용할 수 없음을 의미하기에

위험한 형변환 이다.

 

4. 반대로 하위클래스의 참조변수가 상위클래스의 타입으로 가는것은

하위클래스는 상위클래스로부터 상속을 받은 상황이므로,

상위클래스의 멤버변수 + 메서드를 모두 사용할 수 있다.

따라서 이런경우는 변수앞에 (타입)을 생략 가능하다.

안전한 형변환.

 

5. 하지만 이게 중요한게 아니라, 그냥 잘모르겠으면 (타입)을 다 붙히는쪽으로 생각.

 

6. 중요한건, 

참조변수가 가리키는 인스턴스(객체)의 "타입"이 무엇인지 먼저 확인 한다.

"타입"이 의미하는 바는 멤버를 몇개 들고 있는지를 알 수 있음.

반응형

'Java (국비) > Java 메모' 카테고리의 다른 글

연산자 ==, equals() 메서드 메모  (0) 2023.06.02
다형성 메모  (0) 2023.05.27
4주차 복습  (0) 2023.05.25
MVC 패턴 느낀점  (0) 2023.05.25
MVC (Model-View-Controller) 메모 2  (0) 2023.05.24