참조변수와 인스턴스변수의 연결
1. 멤버변수가 중복정의된 경우 , 참조변수의 타입에 따라
연결되는 멤버변수가 달라진다(참조변수타입에 영향받음)
2. 메서드가 중복정의된 경우 , 참조변수의 타입에 관계없이 항상
실제 인스턴스의 타입에 정의된 메서드가 호출된다 . ( 참조변수타입에 영향받지 않음 )
설명서
앞에서... 참조변수의 타입에 따라 사용할 수 있는 인스턴스의 멤버가 달라진다고 배웠습니다.
그 외에도 한가지 더 차이점이 있는데요.
멤버변수가 중복정의된 경우에는...참조변수의 타입에 따라 연결되는 멤버가 달라진다는 것입니다.
왼쪽과 같이 Parent클래스와 이를 조상으로 하는 Child클래스가 정의되어 있을 때...
멤버변수 x가 중복되어 있습니다. 메서드 역시... 오버라이딩되어 있고요.
main메서드에서...
Child인스턴스를 생성해서 Parent타입의 참조변수로 참조하게 하고,
또하나의 Child인스턴스를 생성해서 Child타입의 참조변수로 참조하게 합니다.
그리고 참조변수 p로 멤버변수 x를 출력하고 메서드를 호출합니다.
그 다음에는 참조변수 c로 멤버변수 x를 출력하고 메서드를 호출합니다.
이 코드가 실행되면 이와 같은 결과를 얻는데요.
참조변수 p로 읽어온 멤버변수x의 값과 참조변수 c로 읽어온 멤버변수 x의 값이 다르다는 것을 알 수 있습니다.
메서드의 경우 참조변수의 타입에 관계 없이 실제 인스턴스인 Child인스턴스의 메서드가 호출되었고요...
이런 결과가 나오는 이유는...
Parent타입의 참조변수 p로 멤버변수 x를 접근하면... Parent클래스에 정의된 멤버변수 x와 연결되고...
Child타입의 참조변수 c로 멤버변수 x를 접근하면... Child클래스에 정의된 멤버변수 x와 연결되기 때문입니다.
이를 통해서 알 수 있는 것은... 멤버변수가 중복된 경우에는 참조변수의 타입에 따라 연결되는
멤버변수가 달라진다는 것입니다.
메서드는 참조변수의 타입에 관계없이 항상 실제 인스턴스의 타입에 정의된 것이 호출되고요.
여기서는 Child인스턴스니까... Child클래스에 정의된 메서드가 호출되고요.
일반적으로는 이처럼 외부에서 멤버변수에 직접 접근하는 경우는 드물고...
메서드를 이용해서 접근하므로... 별문제는 안되기는 합니다.
만일 오른쪽 코드와 같이... 멤버변수나 메서드가 중복되어 정의되지 않은 경우에는 선택의 여지가 없기 때문에...
참조변수의 타입에 따라 결과가 달라지지 않습니다.
같은 이름의 멤버변수가 중복정의되어 있는 경우에만 참조변수의 타입에 따른 차이가 있다는 것
잘 기억해 두시기 바랍니다.
'Backend > java' 카테고리의 다른 글
여러 종류의 객체를 하나의 배열로 다루기 (0) | 2018.08.12 |
---|---|
매개변수의 다형성 (0) | 2018.08.12 |
Instanceof 연산자란 무엇인가. (0) | 2018.08.12 |
참조변수의 형변환 예제 (0) | 2018.08.12 |
참조변수의 형변환 (0) | 2018.08.12 |
#IT #먹방 #전자기기 #일상
#개발 #일상