현실에서 부모없는 자식이 있을수 없듯이 자바에서도 자식 객체를 생성하면, 부모 객체가 먼저 생상되고, 자식 객체가 그 다음에 생성된다.
아래 코드는 DmbCellPhone 객체만 생성하는 것처럼 보이지만 사실은 내부적으로 부모인 CellPhone 객체가 먼저 생성되고, DmbCellPhone 객체가 생성된다.
메모리구조를 보자면
스택영역에는 dmbcellphone가 값형식으로 생성이되면 그 주소값이 가리키는건 dmbcellphone 객체를 가리키며 이 dmbcellphone는 cellphone라는걸 상속받은 형태로 heap영역에 저장이 된다.
======================================================================================
package jongkyu.dmbcellphone;
import jongkyu.cellphone.Cellphone;
public class DmbcellPhone extends Cellphone {
//필드
public int channel;
//생성자
public DmbcellPhone(String model, String color, int channel){
this.model = model;//Cellphone으로부터 상속받은 필드(변수라생각하면된다.)
this.color = color;//Cellphone으로부터 상속받은 필드(변수라생각하면된다.)
this.channel = channel;
}
//메소드
public void turnOnDmb() {
System.out.println("채널 "+ channel + "번 DMB 방송 수신을 시작합니다.");
}
public void changeCannelDmb(int channel) {
this.channel = channel;
System.out.println("채널"+channel+"번으로 바꿉니다.");
}
public void turnOffDmb() {
System.out.println("DMB 방송 수신을 멈춥니다.");
}
}
package jongkyu.run;
import jongkyu.dmbcellphone.DmbcellPhone;
public class Run {
public static void main(String[] args) {
//DmbcellPhone 객체 생성
DmbcellPhone d = new DmbcellPhone("자바폰","검정",10);
//Cellphone으로부터 상속받은 필드
System.out.println("모델 :" + d.model);
System.out.println("색상 :" + d.color);
//DmbCellPhone의 필드
System.out.println("채널 :" + d.channel);
//CellPhone으로부터 상속받은 메소드 호출
d.powerOn();
d.bell();d.sendVoice("여보세요");
d.receiveVoice("안녕하세요 전 김종규인데요");
d.sendVoice("아~예 반갑습니다.");
d.hangUp();
//DmbCellPhone의 메소드 호출
d.turnOnDmb();
d.changeCannelDmb(12);
d.turnOffDmb();
}
}
'IT일반과목 > java' 카테고리의 다른 글
Student 객체의 이해(과제) (0) | 2018.07.23 |
---|---|
메소드 재정의(상속에서 super과 this) (0) | 2018.07.22 |
자바 상속에 대하여3(this와 super)의 의미 (0) | 2018.07.22 |
자바 상속에 대하여2 (0) | 2018.07.22 |
자바 상속에 대하여 (0) | 2018.07.22 |