자바..를 공부하고 있습니다.. 그런데 갑자기 궁금증이..

연우의 이미지

요번에 자바 수업이 있어서.. 자바를 공부하게 됬네요.;

상속하고 참조변수를 선언할때 문젠데요.

Circle이라는 클래스를 MyCircle 클래스가 상속을 받았다고 하고.

다음 코드가 실행시에 오류가 날까요?

Circle c = new MyCircle();

.. 돌려봤더니 에러는 나지 않던데요.

Circle 참조변수 c는 MyCircle의 생성자로 객체를 받았는데..

MyCircle의 인스턴스 변수로는 접근이 안되더라구요.

에러가 나지 않은 이유가 뭘까요?

.. 그리고 MyCircle생성자로 객체를 받았으면서 왜 MyCircle의 인스턴스 변수로는 접근이 안되죠?

fender의 이미지

apl486 wrote:
에러가 나지 않은 이유가 뭘까요?

'나의 동그라미'도 '동그라미'이기 때문입니다.

----------------------------
[서명] 그놈 한국 사용자 모임 - 그놈에 대한 모든 것! - 게시판, IRC, 위키, 갤러리 등등...

연우의 이미지

... 대강 의미는 알겠는데..
:oops:

Circle 클래스의 참조변수 c를 생성자 MyCircle로 객체를 만든것과
Circle 클래스의 참조변수 c를 생성자 Circle로 객체를 만든것과 ..

차이점이 있을까요?

서브클래스의 생성자의 경우 생성자의 첫라인에 super() 가 들어간다고 배웠습니다.

그래서 에러가 안난것인지..짐작은 하는데 확신을 못하겠네요.;

생성자를 불렀다는건. 먼저. 인스턴스 변수들을 초기화시켜준다고 알고 있는데.;

Circle c가 MyCircle클래스의 인스턴스 변수들에게 접근이 안되는이유는..
..뭔지.. 아직 잘모르겠네요.;

나이는 단지 숫자에 불과한것이겠죠.;

fender의 이미지

문제를 너무 복잡하게 생각하시는 것 같네요 :)

(1) 프로그래머 fender = new 자바_프로그래머();
(2) 자바_프로그래머 fender = new 자바_프로그래머();

두 경우 모두 fender는 자바 프로그래머로서 동일한 사람입니다. 단지 첫번 째는 그냥 '프로그래머'라고 통칭해서 부른 거고 두 번째는 '자바 프로그래머'라고 좀 더 구체적으로 지칭한 것 뿐입니다.

연우 wrote:
Circle c가 MyCircle클래스의 인스턴스 변수들에게 접근이 안되는이유는..
..뭔지.. 아직 잘모르겠네요.;

제가 정확히 질문을 이해했는지 모르겠지만, 첫번 째의 경우 실제로 fender는 '자바 프로그래머'지만 선언은 그냥 '프로그래머'라고 해버렸기 때문에 캐스팅을 통해 구체적으로 'fender는 자바프로그래머다'라고 지적해 주기 전에는 자바 프로그래머인지 파이썬 프로그래머인지 알 수가 없다는 뜻입니다.

그래서,

프로그래머 fender = new 자바_프로그래머();
fender.애플릿_좀_짜봐();

이러면 컴파일러가 궁시렁 거리는 것입니다. 대신

프로그래머 fender = new 자바_프로그래머();
((자바_프로그래머) fender).애플릿_좀_짜봐();

이렇게 하는 건 맞습니다. 물론 컴파일은 되는데 '귀찮다_배째라_Exception' 같은 런타임 예외가 발생할 수도 있습니다만 그건 좀 다른 이야기인 것 같습니다 -_-;

----------------------------
[서명] 그놈 한국 사용자 모임 - 그놈에 대한 모든 것! - 게시판, IRC, 위키, 갤러리 등등...

연우의 이미지

:D 구체적인 설명 감사합니다.

^^

정확히 이해했어요

나이는 단지 숫자에 불과한것이겠죠.;

westin의 이미지

class 프로그래머 {
void 프로그램_좀_짜봐() {
// 어떤 언어인지는 모르지만 열심히 짠 코드
}
}

class 자바_프로그래머 extends 프로그래머 {
void 프로그램_좀_짜봐() {
// 열심히 자바로 짠 코드
}
}

class 파이썬_프로그래머 extends 프로그래머 {
void 프로그램_좀_짜봐() {
// 열심히 파이썬으로 짠 코드
}
}

일 경우

프로그래머 fender = new 자바_프로그래머();
fender.프로그램_좀_짜봐();

로 호출하면 fender의 외형적인(?) 타잎이 프로그래머 형임에도 불구하고 자바로 프로그램을 짠답니다 ^^
폴리모피즘이라고 하더군요..
자바를 오래 안해서 문법이 틀릴수가 있는데 애교루다가 ^^;;

junfan의 이미지

역시 우리 선생님 짱

junfan

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.