Java에는 부모 클래스(상위 클래스, 슈퍼클래스)와 자식 클래스(하위클래스, 서브클래스)라는 개념이 있으며,
자식 클래스는 부모 클래스를 선택해, 부모의 멤버(필드)를 상속받아 쓸 수 있다.
상속을 하는 이유는 중복된 코드를 줄이고, 유지 보수를 편리하게 할 수 있으며, 다형성을 구현 할 수 있다.
부모 클래스의 private
접근 제한을 갖는 필드 및 메소드는 자식이 물려 받을 수 없다.
❗ private
변수에 접근 하기 위해서 getter
, setter
를 만들어 간접적으로 접근하는 방법이 있다.
부모와 자식 클래스가 서로 다른 패키지에 있다면, 부모의 default
접근 제한을 갖는 필드 및 메소드도 자식이 물려받을 수 없다.
상속받고자 하는 자식 클래스명 옆에 extends 부모클래스명
을 적는다.
public Class Parent{ .... }; // 부모 클래스
public Class Child extends parent { .... }; // 자식 클래스
❗ Java는 다중 상속을 허용하지 않기 때문에 extends
뒤에는 하나의 부모 클래스만 가능하다.
상속시 기본적으로 부모의 디폴트 생성자를 호출하도록 되어 있다.
super()
키워드는 부모 클래스(객체)를 나타내는 것이다.
필요시 부모의 디폴트생성자가 아닌 파라미터가 있는 생성자를 호출해야 할 때 가 있다.
자식 클래스에서는 반드시 생성자 내부 첫줄에 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