상속의 목적
상속의 구조
class A {
A의 멤버
}
class B extends A{
B의 멤버
}
이 때 B가 A에게 상속받았다고 하며, A가 부모(조상) 클래스, B가 자식(자손) 클래스라고 한다.
생성자와 초기화 블럭은 상속되지 않고 멤버만 상속된다.
여러 세대에 걸쳐 상속될 수 있으며, 다중상속은 허용되지 않는다.
자식 클래스는 부모클래스의 모든 멤버를 상속받는다. 따라서 B b = new B(); 로 B의 객체를 생성하면 객체 b는 A의 멤버와 B의 멤버 둘 다 가지고 있다.
public class Main {
public static void main(String[] args) {
B b = new B();
b.name = "자바";
b.age = 20;
// B가 A를 상속받고 있으므로 A의 멤버인 name과 age 초기화 가능
b.ageUp();
System.out.println(b.age); // 21
// A의 메소드인 ageUp도 사용 가능하다.
b.ageDown();
System.out.println(b.age); // 20
// B에 있는 메소드 ageDown도 사용 가능하다
}
}
class A {
String name;
int age;
int ageUp() {
return ++age;
}
}
class B extends A {
int ageDown() {
return --age;
}
}
위의 코드에서 B 클래스가 A 클래스를 상속받고 있다. 따라서 main 메서드에서
B b = new B();를 통해 B타입의 객체만 만들어도 A의 멤버들을 사용할 수 있다.
Object 클래스
Object 클래스는 모든 클래스의 최상위 부모 클래스이다. 상속을 받지 않는것 처럼 보이는 클래스들도 컴파일러가 자동으로 extends Object 를 추가하여 최상위 클래스인 Object 클래스로부터 상속받고 있는 것이다. 따라서 Object 클래스에 정의된 특정 메서드들을 따로 정의하지 않고 사용할 수 있다.