상속이란 기존의 클래스에 기능을 추가하거나 재정의하여 새로운 클래스를 정의하는 것이다.
기존의 클래스를 재사용해서 만들 수 있기 때문에 효율적이다.
부모클래스(parent class), 상위클래스(super class), 기초클래스(base class)
자식클래스(child class) , 하위클래스(sub class), 파생클래스(derived class)
java.lang.Object
상속받을 자식클래스 뒤에 extends 키워드를 사용하고 부모 클래스를 적는다.
default 접근 제어자: 같은 패키지에 있는 클래스만 접근 가능하다.
public class 자식클래스 extends 부모클래스 {
}
부모 클래스로부터 상속받은 필드나 메소드를 자식 클래스에서 참조하는 데 사용하는 참조 변수다.
부모 클래스의 멤버와 자식 클래스의 필드나 메소드의 이름이 같을 경우 super 키워드를 사용하여 부모 클래스에 접근할 수 있다.
class Parent {
int a = 10;
public void test(){
System.out.println("test");
}
}
class Child extends Parent {
int a = 20;
void display() {
System.out.println(a);//출력: 20
System.out.println(super.a);//출력: 10
super.test();//출력: test
}
}
부모 클래스의 기본 생성자를 호출할 때 사용하는 메소드다.
자식 클래스에 super(매개값)이 생략되면 자바 컴파일러가 모든 자식 클래스의 생성자 첫 줄에 자동으로 super 메소드를 추가하여 부모 클래스의 생성자를 초기화 해준다.
유의!
부모 클래스에 매개 변수가 있는 생성자만 있고 기본 생성자가 없다면,
자식 생성자에서 반드시 부모 생성자 호출을 위해 super(매개값)를 자식 생성자 첫 줄에 호출해야 한다.
자식클래스(매개변수선언, ...){
super(매개값, ...);//매개값과 타입이 일치하는 부모 생성자를 호출
}
예시
부모클래스: TestParent
자식클래스: Test
//부모클래스
public class TestParent {
public String id;
public int num;
//기본 생성자 없음
//매개변수가 있는 생성자 선언
public TestParent(String id, int num) {
//인스턴스 변수를 초기화
this.id = id;
this.num = num;
}
}
//자식클래스
public class Test extends TestParent {
int intTest = 10;
public Test(String id, int num, int intTest) {
super(id, num);//부모 생성자 호출
this.intTest = intTest;
}
}