[Java] 상속(Inheritance)

JUNBEOM PARK·2022년 2월 15일
0

🧨 Java

목록 보기
20/33
post-thumbnail

🤔 상속(Inheritance)

Java에는 부모 클래스(상위 클래스, 슈퍼클래스)자식 클래스(하위클래스, 서브클래스)라는 개념이 있으며,
자식 클래스는 부모 클래스를 선택해, 부모의 멤버(필드)를 상속받아 쓸 수 있다.

상속을 하는 이유는 중복된 코드를 줄이고, 유지 보수를 편리하게 할 수 있으며, 다형성을 구현 할 수 있다.


✔ 상속 할 수 없는 경우

  • 부모 클래스의 private 접근 제한을 갖는 필드 및 메소드는 자식이 물려 받을 수 없다.
    private 변수에 접근 하기 위해서 getter, setter를 만들어 간접적으로 접근하는 방법이 있다.

  • 부모와 자식 클래스가 서로 다른 패키지에 있다면, 부모의 default 접근 제한을 갖는 필드 및 메소드도 자식이 물려받을 수 없다.


😎 상속의 방법 - extends

상속받고자 하는 자식 클래스명 옆에 extends 부모클래스명 을 적는다.

public Class Parent{ .... }; // 부모 클래스
public Class Child extends parent { .... }; // 자식 클래스

❗ Java는 다중 상속을 허용하지 않기 때문에 extends 뒤에는 하나의 부모 클래스만 가능하다.



😉 부모 생성자의 호출 - super();

  1. 상속시 기본적으로 부모의 디폴트 생성자를 호출하도록 되어 있다.

  2. super() 키워드는 부모 클래스(객체)를 나타내는 것이다.

  3. 필요시 부모의 디폴트생성자가 아닌 파라미터가 있는 생성자를 호출해야 할 때 가 있다.
    자식 클래스에서는 반드시 생성자 내부 첫줄에 super( 매개값 , 매개값, …); 과 같이 선언해 주어야 한다.


public class SpecialMember extends GeneralMember {
	private int bonusPoint;
	
	public SpecialMember() {
		
	}

	public SpecialMember(String id, String name, String address, int bonusPoint) {
		super(id, name, address);// 부모의 파라미터 값이 있는 생성자를 호출한다.
		this.bonusPoint = bonusPoint;
	}



📃 예제

GeneralMember.java


package kosta.video;

public class GeneralMember {
	private String id;
	private String name;
	private String address;
	private Video rental; // 대여한 비디오
	
	public GeneralMember() {
		
	}
	
	public GeneralMember(String id, String name, String address) {
		super();
		this.id = id;
		this.name = name;
		this.address = address;
	}
	
	public void show() {
		System.out.println("회원의 아이디 :" + id);
		System.out.println("회원의 이름 :" + name);
		System.out.println("회원의 주소 :" + address);
		rental.print();
		System.out.println("=============================");
	}

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getAddress() {
		return address;
	}

	public void setAddress(String address) {
		this.address = address;
	}

	public Video getRental() {
		return rental;
	}

	public void setRental(Video rental) {
		this.rental = rental;
	}

	
	
	
	
}

SpecialMember.java

package kosta.video;

public class SpecialMember extends GeneralMember {
	private int bonusPoint;
	
	public SpecialMember() {
		
	}

	public SpecialMember(String id, String name, String address, int bonusPoint) {
		super(id, name, address);// 부모의 파라미터 값이 있는 생성자를 호출한다.
		this.bonusPoint = bonusPoint;
	}
	
	public void print() {
		System.out.println("보너스 포인트 : " + bonusPoint);
	}
	public int getBonusPoint() {
		return bonusPoint;
	}

	public void setBonusPoint(int bonusPoint) {
		this.bonusPoint = bonusPoint;
	}
	
	
	
}

Main.java

package kosta.video;

import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		Video v1 = new Video("1","경관의피","조진웅");
		Video v2 = new Video("2","기생충","송강호");
		
		//SpecialMember : bonusPoint
		//구현
		
		GeneralMember m = new GeneralMember("aaa","홍길동","가산");
		m.setRental(v1);
		m.show();
		
		SpecialMember sm = new SpecialMember("2","박길동","강남",100);
		sm.setRental(v2);
		sm.show();
		sm.print();
		
	}

}


참고자료
https://babodocoding.tistory.com/36
https://blog.naver.com/PostView.nhn?blogId=heartflow89&logNo=220960019390

profile
DB 엔지니어👍

0개의 댓글