본문 바로가기

IT일반과목/java

자바 상속에 대하여4

현실에서 부모없는 자식이 있을수 없듯이 자바에서도 자식 객체를 생성하면, 부모 객체가 먼저 생상되고, 자식 객체가 그 다음에 생성된다.

아래 코드는 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.cellphone;

public class Cellphone {
//필드
public String model;
public String color;
//생성자
public Cellphone() {
// TODO Auto-generated constructor stub
}
//메소드
public void powerOn() {
System.out.println("전원을 켭니다.");
}
public void powerOff() {
System.out.println("전원을 끕니다.");
}
public void bell() {
System.out.println("벨이 울립니다.");
}
public void sendVoice(String message) {
System.out.println("나 : "+message);
}
public void receiveVoice(String message) {
System.out.println("상대방 : "+message);
}
public void hangUp() {
System.out.println("전화를 끊습니다.");
}
}

===============================================================================

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();

}

}