Notice
Recent Posts
Recent Comments
Link
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Tags more
Archives
Today
Total
관리 메뉴

luke

[자바/Java] - 상속 본문

Study/Java

[자바/Java] - 상속

luke-king 2024. 1. 13. 16:53

 

상속 관계

상속은 객체 지향 프로그래밍의 핵심 요소 중 하나로, 기존 클래스의 필드와 메서드를 새로운 클래스에서 재사용하게 해준다. 이름 그대로 기존 클래스의 속성과 기능을 그대로 물려받는 것이다. 상속을 사용하려면 'extends' 키워드를 사용하면 된다. 그리고 'extends' 대상은 하나만 선택할 수 있다.

 

 

용어 정리

  • 부모 클래스 (슈퍼 클래스): 상속을 통해 자신의 필드와 메서드를 다른 클래스에 제공하는 클래스
  • 자식 클래스 (서브 클래스): 부모 클래스로부터 필드와 메서드를 상속받는 클래스

상속 관계 사용 코드를 보겠다.

 

<Car>

public class Car {
 public void move() {
	 System.out.println("차 움직여요~.");
 }
}

위 코드는 부모 클래스 이다. 자동차의 공통 기능인 'move()'가 포함되어 있는 것이다.

 

<K5>

public class K5 extends Car {
	public void Buy() {
	 System.out.println("K5 뽑았어요.");
 }
}

K5 클래스는 'extends Car'를 사용해서 부모 클래스인 'Car'를 상속 받는다. 상속 덕분에 'move()'를 사용할수 있다.

 

<K9>

public class K9 extends Car {
	public void Buy() {
	 System.out.println("K9 뽑았어요.");
 }
}

K9 클래스도 마찬가지로 'extends Car'를 사용해 부모 클래스인 'Car'를 상속 받아 'move()'를 사용할수 있다.

그럼 메인클래스에서 확인 해보자.

 

<CarMain>

public class CarMain {
	public static void main(String[] args) {
 
     K5 k5 = new K5();
     k5.move();
     k5.Buy();
 
     K9 k9 = new K9();
     k9.move();
     k9.Buy();
 }
}

 

<실행 결과>

차 움직여요~.
K5 뽑았어요.
차 움직여요~.
K9 뽑았어요.

 

K5,K9은 'Car'를 상속 받은 덕분에 k5.move(), k9.move()를 사용할 수 있다.

 

상속과 메모리구조를 위 코드로 이야기 하자면 k5인스턴스가 생성 되는 순간 참조값은 하나이지만 실제로 그 안에서는 두가지 클래스(k5,Car) 정보가 공존한다. 상속이라고 해서 단순하게 부모의 필드와 메서드만 물려 받는게 아니다.

상속 관계를 사용하면 부모 클래스도 함께 포함해서 생성된다. 외부에서 볼대는 하나의 인스턴스를 생성하는 것 가티만 내부에서는 부모와 자식이 모두 생성되고 공간도 구분된다.

 

중요!!!!

  • 상속 관계의 객체를 생성하면 그 내부에는 부모와 자식이 모두 생성된다.
  • 상속 관계의 객체를 호출할 때, 대상 타입을 정해야 한다. 이때 호출자의 타입을 통해 대상 타입을 찾는다.
  • 현재 타입에서 기능을 찾지 못하면 상위 부모 타입으로 기능을 찾아서 실행한다. 기능을 찾지 못하면 컴파일 오류가 발생한다.

 

 

 

 

※ 출처: Inflearn 김영한-Java 강의 중