자바..를 공부하고 있습니다.. 그런데 갑자기 궁금증이..
글쓴이: 연우 / 작성시간: 월, 2004/04/19 - 10:51오후
요번에 자바 수업이 있어서.. 자바를 공부하게 됬네요.;
상속하고 참조변수를 선언할때 문젠데요.
Circle이라는 클래스를 MyCircle 클래스가 상속을 받았다고 하고.
다음 코드가 실행시에 오류가 날까요?
Circle c = new MyCircle();
.. 돌려봤더니 에러는 나지 않던데요.
Circle 참조변수 c는 MyCircle의 생성자로 객체를 받았는데..
MyCircle의 인스턴스 변수로는 접근이 안되더라구요.
에러가 나지 않은 이유가 뭘까요?
.. 그리고 MyCircle생성자로 객체를 받았으면서 왜 MyCircle의 인스턴스 변수로는 접근이 안되죠?
Forums:
Re: 자바..를 공부하고 있습니다.. 그런데 갑자기 궁금증이..
'나의 동그라미'도 '동그라미'이기 때문입니다.
----------------------------
[서명] 그놈 한국 사용자 모임 - 그놈에 대한 모든 것! - 게시판, IRC, 위키, 갤러리 등등...
;;
... 대강 의미는 알겠는데..
:oops:
Circle 클래스의 참조변수 c를 생성자 MyCircle로 객체를 만든것과
Circle 클래스의 참조변수 c를 생성자 Circle로 객체를 만든것과 ..
차이점이 있을까요?
서브클래스의 생성자의 경우 생성자의 첫라인에 super() 가 들어간다고 배웠습니다.
그래서 에러가 안난것인지..짐작은 하는데 확신을 못하겠네요.;
생성자를 불렀다는건. 먼저. 인스턴스 변수들을 초기화시켜준다고 알고 있는데.;
Circle c가 MyCircle클래스의 인스턴스 변수들에게 접근이 안되는이유는..
..뭔지.. 아직 잘모르겠네요.;
나이는 단지 숫자에 불과한것이겠죠.;
Re: ;;
문제를 너무 복잡하게 생각하시는 것 같네요 :)
두 경우 모두 fender는 자바 프로그래머로서 동일한 사람입니다. 단지 첫번 째는 그냥 '프로그래머'라고 통칭해서 부른 거고 두 번째는 '자바 프로그래머'라고 좀 더 구체적으로 지칭한 것 뿐입니다.
제가 정확히 질문을 이해했는지 모르겠지만, 첫번 째의 경우 실제로 fender는 '자바 프로그래머'지만 선언은 그냥 '프로그래머'라고 해버렸기 때문에 캐스팅을 통해 구체적으로 'fender는 자바프로그래머다'라고 지적해 주기 전에는 자바 프로그래머인지 파이썬 프로그래머인지 알 수가 없다는 뜻입니다.
그래서,
이러면 컴파일러가 궁시렁 거리는 것입니다. 대신
이렇게 하는 건 맞습니다. 물론 컴파일은 되는데 '귀찮다_배째라_Exception' 같은 런타임 예외가 발생할 수도 있습니다만 그건 좀 다른 이야기인 것 같습니다 -_-;
----------------------------
[서명] 그놈 한국 사용자 모임 - 그놈에 대한 모든 것! - 게시판, IRC, 위키, 갤러리 등등...
^-^;
:D 구체적인 설명 감사합니다.
^^
정확히 이해했어요
나이는 단지 숫자에 불과한것이겠죠.;
참고로 말씀드리자면..
class 프로그래머 {
void 프로그램_좀_짜봐() {
// 어떤 언어인지는 모르지만 열심히 짠 코드
}
}
class 자바_프로그래머 extends 프로그래머 {
void 프로그램_좀_짜봐() {
// 열심히 자바로 짠 코드
}
}
class 파이썬_프로그래머 extends 프로그래머 {
void 프로그램_좀_짜봐() {
// 열심히 파이썬으로 짠 코드
}
}
일 경우
프로그래머 fender = new 자바_프로그래머();
fender.프로그램_좀_짜봐();
로 호출하면 fender의 외형적인(?) 타잎이 프로그래머 형임에도 불구하고 자바로 프로그램을 짠답니다 ^^
폴리모피즘이라고 하더군요..
자바를 오래 안해서 문법이 틀릴수가 있는데 애교루다가 ^^;;
오오오..
역시 우리 선생님 짱
junfan
댓글 달기