[Java] 자바의 상속(Inheritance)에 대한 간단한 이해


♦ 자바의 상속(Inheritance)
상속의 특징
객체 간의 is a 관계가 성립되어야 한다.
부모클래스의 멤버(인스턴스 변수, 메소드)를 자식클래스가 선언 없이 사용가능하다. 단 private 접근지정자와 생성자는 상속되지 않는다.
자바는 단일 상속(Single Inheritance)만을 지원한다.
extends 키워드로 표현한다.
API 및 사용자가 만든 클래스들은 모두 상속 관계인 계층구조로 되어있다. 가장 상위에는 java.lang.Object 클래스가 있다. 따라서 모든 클래스는 Object 클래스를 상속받는다.

상속의 형식

public class 자식클래스명 extends 부모클래스명 { }

 

class AA { // 부모클래스

	String name = "홍길동";

	public String getName() {
		return name;
	}

}

class BB extends AA { // extends 키워드로 AA 클래스를 상속

	int age = 23;

	public int getAge() {
		return age;
	}

}

public class Test01 {

	public static void main(String[] args) {
		BB bb = new BB();
		System.out.println(bb.getName());
		System.out.println(bb.getAge());
	}

}

 

상속과 생성자
생성자는 상속되지 않는다.
클래스를 객체 생성할 때에는 자동으로 부모클래스를 먼저 객체 생성 후에 자신의 클래스가 생성된다. 부모클래스가 먼저 생성되어야 자식 클래스가 부모클래스의 멤버를 사용할 수 있기 때문이다. 부모클래스를 객체 생성하기 위해서 자동으로 부모클래스의 기본생성자가 호출된다.

public class Test01 {

	public static void main(String[] args) {
		BB bb = new BB();
	}

}

class AA {

	public AA() {
		System.err.println("AA 생성자");
	}

}

class BB extends AA {

	public BB() {
		System.err.println("BB 생성자");
	}
}

 

super 키워드
this 키워드는 메모리에 올라간 자신의 인스턴스를 의미하고 super 키워드는 부모의 인스턴스를 의미한다.

상속관계의 자식클래스에서 부모클래스의 구성요소를 명시적으로 호출할 때 사용하다. 자동으로 자식클래스에서 부모클래스의 멤버를 사용할 수 있지만 특별한 목적으로 부모클래스의 멤버 및 생성자를 명시적으로 호출할 수 있다.

일반적으로 다음 2가지 경우에 사용한다.

1. 부모클래스의 멤버와 자식클래스의 멤버가 이름이 동일한 경우

class AA {

	String name = "홍길동"; 
	
}

class BB extends AA {

	String name = "이순신";
	
	public void getInfo() {
		System.out.println(super.name); // 홍길동 출력
		System.out.println(this.name);	// 이순신 출력
		System.out.println(name);	// 이순신 출력
	}
}

 

2. 자식클래스에서 명시적으로 부모클래스의 생성자를 호출하는 경우

class AA {
	String name;
	public AA(String name) {
		this.name=name;
	}

}

class BB extends AA {
	public BB(String name) {
		super(name); // 부모클래스의 생성자 호출
	}

}

 

답글 남기기