JAVA 7강_1_상속(inheritance), super과 this의 설명

열라뽕따히·2024년 2월 13일

JAVA

목록 보기
39/79

상속(inheritance)이란?

  • 객체지향 프로그램 4대 특징 중 하나

  • 실세계에서의 상속은 상위 객체의 속성이 하위 객체에 물려줘서 하위 객체가 상위 객체의 속성을 모두 가지는 개념

  • 자바에서의 상속은 자식클래스가 부모클래스의 속성을 물려 받고 기능을 추가하여 확장(extends)하는 개념

  • 상속은 슈퍼클래스의 필드와 메서드를 물려받아서 코드를 재사용함으로써, 코드 작성에 드는 시간과 비용을 줄일 수 있음

  • ★★ 기존에 이미 잘 만들어진 클래스를 재사용하여 새로운 클래스를 생성하는 자바 문법 ★★
    즉, 특정 클래스를 만들 때 기존 클래스의 데이터(속성)와 기능(메서드)을 그대로 물려 받아서 중복적인 코드를 없애줌 (클래스의 재사용, 코드의 중복을 없애줌)

  • 자식과 부모의 관계로 형성이 되어 있음
    ==> 부모클래스 : Super, Parent 클래스 라고 하기도 함
    ==> 자식클래스 : Sub, Child 클래스 라고 하기도 함
    ==> 자식은 부모의 멤버보다 같거나 많음

  • 상속의 대상은 멤버 (멤버변수, 멤버메서드)
    ==> 단, 생성자나 private 접근 제한을 갖는 멤버변수와 멤버메서드는 상속에서 제외

  • 상속 시 사용되는 키워드 : extends

  • 상속은 단일 상속만 가능함
    ==> 즉, 상속을 받을 수 있는 클래스는 하나임

  • 상속의 장점은 클래스의 수정을 최소화시킬 수 있다는 장점이 있음. 또한 유지보수의 시간을 최소화시켜 줄 수 있음

형식)

    [접근제한] class 자식클래스명 extends 부모클래스명 {
           ...........;
    }
  • 상속 관계 : "~ 은 ~ 이다" ==> is ~ a 관계
    포함 관계 : "~ 은 ~ 를 가지고 있다" ==> has ~ a 관계
    ==> 사람은 (name, age, id) 를 가지고 있음

  • 주의사항 : 부모클래스는 반드시 기존에 미리 정의되어 있어야 함!!




<예시>



Car 클래스 생성


=============================코드=============================
// 부모 클래스
public class Car {       // 자동차 클래스
	
	// 멤버변수
	int cc;
	int door;
	
}

Sonata 클래스 생성(Car 클래스를 상속받을 것임!)


=============================코드=============================
public class Sonata extends Car{     // extends 상속받을클래스명
	
	String model;  // 차량 모델명
	// int cc;  ==> 포함된 것
	// int door; ==> 포함된 것
	
	void getCarinfo() {
		
		System.out.println("모델명 >>> " + model);
		System.out.println("배기량 >>> " + cc);
		System.out.println("차량 문 수 >>> " + door);
		
	} // getCarinfo() 메서드 end
	
}

메인메서드로 받을 Car_01 클래스 생성




=============================코드=============================

public static void main(String[] args) {
		
		/*
		 * Sonata 클래스 객체 생성 과정
		 * - Sonata 클래스의 객체 생성 시에 JVM은
		 *   우선적으로 Car 이라는 부모 클래스의 객체를 
		 *   먼저 생성한 후에 그 다음에 Sonata 클래스의 
		 *   객체를 생성함
		 */
		
		Sonata sonata = new Sonata();
		
		sonata.model = "소나타";
		
		sonata.cc = 2000;
		
		sonata.door = 4;
		
		sonata.getCarinfo();

	}

=============================실행=============================





1. super 키워드 :

부모의 멤버를 호출하는 명령어
형식) super.부모클래스멤버(멤버변수, 멤버메서드)

2. this 키워드 :

현재 클래스에 소속된 멤버를 호출하는 명령어
this 키워드는 현재 객체 자기 자신을 의미함
형식) this.현재(자식) 클래스멤버 (멤버변수, 멤버메서드)



<예시>

Car2 클래스 생성

=============================코드=============================

public class Car2 {
	
	int cc;
	int door;
	String color = "검정색";

}



Car2 클래스를 상속받을 Avante 클래스 생성


=============================코드=============================

public class Avante extends Car2 {
	
	String color = "흰색";
	
	void getCarinfo() {
		System.out.println("엔진 : " + cc + ", 차량 문 수 : " + door + ", 색상 : " + color);
		
		System.out.println("엔진 : " + cc + ", 차량 문 수 : " + door + ", 색상 : " + super.color);
		
		System.out.println("엔진 : " + cc + ", 차량 문 수 : " + door + ", 색상 : " + this.color);  // Avante클래스의 자신
		
	}

}



메인메서드로 받을 Car_02 클래스 생성


=============================코드=============================

public static void main(String[] args) {
		
		Avante avante = new Avante();
		
		avante.cc = 1600;
		
		avante.door = 4;
		
		avante.getCarinfo();      // Car2에는 색상 : 검정색, Avante의 색상 : 흰색을 선언 시 흰색이 나옴 ==> 자식멤버가 더 우선!!!
		                          // super.color를 줄 시 부모멤버가 출력
	}

=============================실행=============================

0개의 댓글