상속의 기본적인 특성
기존의 정의된 클래스에 메소드와 변수를 추가하여 새로운 클래스를 정의하는것이다.
상속을 받은 클래스의 인스턴스에는 상속의 대상인 클래스의 정의된 메소드와 변수가 존재한다.
상속관계에서 상속을 받은 클래스를 가르켜 '하위클래스(sub class)'
상속의 대상이 된 클래스를 '상위클래스(super class)' 라 부른다.
상위클래스로부터 상속받는 하위클래스가 확장(extends) 하는것이다.
상속의 장점은 코드의 중복을 줄일수있고 , 유지보수 또는 재활용이 용이하다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | //상위클래스 (super class) public class A { int a = 0; public static void A(){ } } //하위클래스 (sub class) public class B extends A { } public class MainDemo { public static void main(String[] args){ B b = new B(); b.A(); //상속을받음으로써 //B클래스에 정의되지않은 메서드인A();를 호출이가능하다. System.out.println(b.a); //상속을받음으로써 //B클래스에 선언되지않은 변수 a를 사용할수있다. } } | cs |
상속과 생성자
하위클래스의 생성자 내에서는 반드시 상위클래스의 생성자가 호출되어야 한다.
만일 상위클래스의 생성자를 호출할수없는 구조로 하위 클래스의 생성자가 정의된다면,
하위클래스의 인스턴스 생성은 불가능하다.
1 2 3 4 5 6 | public class B extends A { public B(){ super(); }; } | cs |
하위클래스 내의 생성자에는 상위클래스를 가르키는 키워드인 super 를 사용해
상위클래스의 생성자를 호출하고있다. 이부분은 생략해도 자동으로 삽입된다.
1 2 3 4 5 6 7 8 9 10 | package java01; public class A extends Object { //extends Object생략 int a; public A(){ super(); //상위클래스 생성자 호출 a=0; } } | cs |
자바의 모든 클래스는 상위클래스가 있어야한다 상위클래스가 없는경우
자동으로 Object 클래스를 상속받는다. 코드는 생략되있다.