수다닷컴

  • 해외여행
    • 괌
    • 태국
    • 유럽
    • 일본
    • 필리핀
    • 미국
    • 중국
    • 기타여행
    • 싱가폴
  • 건강
    • 다이어트
    • 당뇨
    • 헬스
    • 건강음식
    • 건강기타
  • 컴퓨터
    • 프로그램 개발일반
    • C언어
    • 비주얼베이직
  • 결혼생활
    • 출산/육아
    • 결혼준비
    • 엄마이야기방
  • 일상생활
    • 면접
    • 취업
    • 진로선택
  • 교육
    • 교육일반
    • 아이교육
    • 토익
    • 해외연수
    • 영어
  • 취미생활
    • 음악
    • 자전거
    • 수영
    • 바이크
    • 축구
  • 기타
    • 강아지
    • 제주도여행
    • 국내여행
    • 기타일상
    • 애플
    • 휴대폰관련
  • 프로그램 개발일반
  • C언어
  • 비주얼베이직

안녕하세요..다형성 질문입니다^^

별빛

2023.04.01

안녕하세요!!
요즘 학원에서 스터디를 하고 있습니다..한분씩 단원별루 준비해서 발표하고 회의를 하는 형태로..ㅎㅎ

제가 다형성을 해야합니다만..이해가 가질 않는 부분이 있어서요!!

메모리에 어떻게 올라가는지랄까요??
아래 인터넷에서 퍼온 예제인데요..

abstract class Tire{
int max=100;
public void run(){
System.out.println(나는 달려요);
}
abstract public void myPr();
}
class NonSkidTire extends Tire{
int max = 80;
public void myPr(){
System.out.println(최대속도는 +max+km/h 이고 저는 눈길 빗길에도 미끄럽지 않습니다.);
}
}
class Car{
public static void main(String[] args){
Tire nt = new NonSkidTire();
nt.run();
nt.myPr();
System.out.println(((NonSkidTire)nt).max);
}
}

nt객체로 메소드를 부를 때 오버라이딩 되지않으면 부모클래스..아니면 자식클래스 사용하고..
nt객체로 멤버필드는 부모클래스의 멤버필드를 사용하며..자식의 멤버필드를 사용할때는 오버라이딩된 메소드안에서 사용할 수 있다.. 이거는 규칙이니깐 이해를 하겠습니다만..
인터넷에도 다 예제를 써서 저렇게 된다는 말만 있고..

왜 저렇게 되는지..확실한 뭔가가 빠진듯 하네요..
마지막줄에 System.out.println(((NonSkidTire)nt).max);
이거는 대충은 되는구나 생각은 했습니다만..형변환이 과연 왜 되는지..

class Parent{}
class DerivedOne extends Parent{}
class DerivedTwo extends Parent{}
public class Test{
public static void main(String args[]){
Parent p = new Parent();
DerivedOne d1=new DerivedOne();
DerivedTwo d2=new DerivedTwo();
}
}
위 와 같은 소스는 SCJP문제 풀이중 나왔습니다..
마지막줄이 바뀌면서 여러문제가 나왔는데요..
d2=d1;
--컴파일 에러

p=d2;
--됨

d2=(DerivedTwo)d1;
--컴파일 에러

d2=(DerivedTwo)p;
--컴파일은 되나 런타임에러

p=(Parent)d1;
--됨

d2=p;
--컴파일 안됨

위 소스한개로 한줄만 바꿔치기해서 6문제가 나와버렸네요..
아..직접 써서 컴파일 안해보니 모르겠더군요..
맨위에 쓴Tire 클래스 소스만의 개념만 가지고 있으니
형변환에서 완전 막히고..

시원하게 답변 좀 부탁드립니다..아니면 어디 설명 잘된 곳 이라두..^^

ps. 글구 저번에 찬님 답변 감사했습니다..제가 하노이 타워 스윙때문에 질문드렸었는데 잘풀렸습니다..
스레드로 넣으니까 잘되더군요..한가지 제가 의아했던 점은요..
swing으로 안하고 awt로 하면 된다는 점이에요..awt는 OS의 자원을 사용하니깐 그래픽이 그려지는 거 같고
swing은 아니라서 그런 것 같습니다..확실히는 모르겠습니다만..swing은 스레드를 돌리니깐 된다는거..아무튼
찬님 감사합니다^^

신청하기





COMMENT

댓글을 입력해주세요. 비속어와 욕설은 삼가해주세요.

  • 단순드립

    그럼 자식 = (자식)부모 가 런타임시 에러가 나는데 왜 부모자식간에 캐스팅이 가능하도록 해 놨나요? 어떤 특별한 이유가 있나요? 차라리 코드에러로 잡는게 프로그래머 입장에서 편한거 아닌가요?.. 그러니까 부모자식간 양쪽다 캐스팅을 되게 하지 말고 부모 = 자식 대입연산자나 부모 = (부모)자식 형태의 캐스팅만 가능하게 해 놓게 맞지 않나요?

  • 아이돌

    ㅎㅎ네..스터디에서 발표도 잘됐고..다들 잘 이해한것 같네요..하나하나 풀려갈때마다 그 쾌감이 좋군요^^

  • 파도

    많이 하다보면 아시게 될것이예요. ㅎㅎ \체득\하신다고 하죠. ㅋㅋ.
    모르는것 같은데, 몸은 알고 있어. ㅎㅎ.

  • 물맑

    감사합니다..이해가 안되서 계속 읽어봤습니다^^어느정도 이해했네요..어렵긴 어렵군요..ㅜㅜ갈길이 아직 먼듯..

  • 텃골돌샘터

    d2 = (DerivedTwo)p 의 경우에는
    1. p를 DerivedTwo로 캐스팅하는것은 가능합니다. ( 부모자식간의 casting 이 가능. 컴파일 에러 안남 )
    2. 하지만 실행 할때에, 결국에는 d2 = p로 되는것 ( 자식참조에 부모 객체를 넣는것 - 문제가 생김 )

  • 시크포텐

    3.
    가장 결정적인것은, 부모자식간에만 casting을 할 수 있도록 만들어 두었다는것입니다.

    위의 예제를 보면
    DerivedOne 과 DerivedTwo는 부모 자식간의 관계가 아니기 때문에 캐스팅이 불가능합니다.
    ( 정확하게 말하자면, 꼭 부모자식의 관계가 아니라, interface도 캐스팅이 가능합니다. )

  • 보아라

    내용에 대한 답변.
    1.
    부모의 참조변수에 자식의 객체를 할당하는것은 가능합니다.
    자식이라는 말은, 부모에게서 상속 받아 무언가가 추가 될 수 있다. 라는 의미입니다.
    이때, 자식은 부모에게 받은것을 가지고 있다는 \보장\이 있기 때문에,
    부모참조로 사용할 수 있는 각종 메소드를 호출하여도, 자식에 있기 때문에 잘 수행될것입니다.


    2.
    하지만 자식참조변수에 부모의 객체를 할당하면 문제가 됩니다.
    자식은 부모를 확장할 수 있기 때문에, 부모가 가지고

  • 연와인

    PS에 대한 답변.
    1. 예전 답변에 Java에서 그림을 그릴때에는 Event Dispatch Thread에서 수행된다고 적어 두었습니다.
    2. 하지만 이것은 거짓말입니다. 정확하게 말하면 Swing만 EDT에서 수행 됩니다.
    3. AWT는 OS(Windows)에서 그림을 그립니다.
    4. 움직이는것은 Java의 데이터도, 그리는것은 OS이니 안 멈추게 됩니다.

    앞으로 시간이 오래 걸리는 무슨일을 할때에는 왠만하면 꼭 스레드를 이용해 주세요~ ㅎㅎ

번호 제 목 글쓴이 날짜
2695844 저기 암호화 및 복호화 프로그램.. 만들어볼려는대 (2) 한빛 2025-05-24
2695814 [질문] PDA에서 애플릿이 가능한가요? (1) 봄시내 2025-05-24
2695785 웹 설정 도와줄분 화이트캣 2025-05-23
2695730 갑자기 기억이 안나는데 accesskey 속성.. 빛나라 2025-05-23
2695702 [질문] Java 버전 차이에 의한 오류?!! (2) 검사 2025-05-23
2695672 자바 임베디드 쪽으로 배우고 싶은데요..질문이요.. (1) 뽀그리 2025-05-22
2695647 헉! 이클립스(v3.1)에서 발생되는 널포인트 익셉션? ;;; (3) 아빠몬 2025-05-22
2695586 IFRAME 캐싱 질문 봄나비 2025-05-22
2695498 [질문]실행가능한 jar파일.. 정말 이해가 안가네요... ㅡㅜ;; 터1프한렩 2025-05-21
2695468 자바랑 이클립스에서요.. 스킬 2025-05-21
2695375 Mysql 연동하는 자바 질문있습니다. 아리솔 2025-05-20
2695319 파워포인트 파일을 저장할 수 있을까요? 시윤 2025-05-19
2695289 [질문]Tween 값의 정도를 알고 싶습니다. 타마 2025-05-19
2695238 c 와 c++의 시작 (10) ChocoHoilc 2025-05-18
2695215 탑메뉴의 repeat-x .배경이 두가지에요ㅠ ㅠ 널위해 2025-05-18
2695187 자바스크립트와 자바의 import에 관해서 질문드려요 (1) 무슬 2025-05-18
2695116 테마 문의 (해당 사이트와 같은 테마 혹은 플러그인) Sweet 2025-05-17
2695084 [질문] starDrag()와 같은 함수 만들기 민구 2025-05-17
2695055 폰트 질문드립니다. 할인사이트에 많이 쓰는 굵은 숫자폰트.. (2) 일본녀 2025-05-17
2695025 [개발툴]Jcreator 에 관해서... (5) 에녹 2025-05-16
<<  이전  1 2 3 4 5 6 7 8 9 10  다음  >>

수다닷컴 | 여러분과 함께하는 수다토크 커뮤니티 수다닷컴에 오신것을 환영합니다.
사업자등록번호 : 117-07-92748 상호 : 진달래여행사 대표자 : 명현재 서울시 강서구 방화동 890번지 푸르지오 107동 306호
copyright 2011 게시글 삭제 및 기타 문의 : clairacademy@naver.com