자바 메모리 구조..
글쓴이: ITCEO / 작성시간: 토, 2007/05/26 - 4:01오후
class Student {
public String toString() { return "Student"; }
}
class GStudent extends Student {
public String toString() { return "GStudent"; }
}
class UStudent extends GStudent {
public String toString() { return "UStudent"; }
}
/* 위의 3개의 클래스는 상속관계에 있으면서 상위 클래스의 메소드를 오버라이딩하고 있다 */
public class PBTest {
public static void main(String args[]) {
UStudent us = new UStudent();
method1(us);
method1(new GStudent());
method1(new Student());
}
public static void method1(Student x) {
System.out.println(x.toString());
}
}
출력결과
UStudent
GStudent
Student
제가 궁굼한 것은 method1메소드에 동적으로 GStudent를 넘겨 주고 있는데 그것을 Student x 롤 받고 있습니다. 메모리 구조가 어떻게 돌아가는지 궁굼합니다. 자세히..
Forums:
별로 이상할 것은
별로 이상할 것은 없는 것 같습니다.
첫번째 method1()은 UStudent를 받았으므로 toString()이 UStudent가 나오는게 정상
두번째 method1()은 GStudent를 받았으므로 toString()이 GStudent가 나오는게 정상
...
클래스가 상속되면서 메소드가 오버라이드 되었다면
상위클래스 메소드는 하위클래스에서 super.xxx() 식으로 호출해주지 않으면 못쓰는걸로 알고 있습니다.
그리고 자바에서 클래스를 인수로 전달하면 클래스가 복사되는게 아니라 해당 클래스에
대한 포인터로 넘겨버리죠.
메소드내에 선언된 클래스 변수들은 모두 그 클래스 자체가 아니라 클래스에 대한 포인터입니다.
그래서 클래스 변수를 하나 선언한 뒤에도 모두 new를 해줘야 쓸 수 있습니다.
(실제 클래스는 다른 곳에 있고 클래스의 위치는 JVM에서 모두 관리하므로 프로그래머는 신경쓸필요 없습니다)
Written By the Black Knight of Destruction
Written By the Black Knight of Destruction
댓글 달기