📚
상속
June 03, 2023
상속
기존의 클래스를 재사용하여 새로운 클래스를 작성하는 것
class Child extends Parent {
...
}
- 상속을 받는다는 것은 상위 클래스를 확장(extends)한다는 의미로 해석된다.
- 하위 클래스는 상위클래스의 생성자, 초기화 블럭을 제외한 모든 멤버를 모두 상속받는다.
- 상위 클래스가 변경되면 모든 하위 클래스는 자동으로 영향을 받지만, 하위 클래스가 변경되는 것은 상위 클래스에 아무런 영향이 없다.
포함관계
상속 이외에도 클래스를 재사용하는 다른 방법, 한 클래스의 멤버변수로 다른 클래스 타입의 참조 변수를 선언하는 것
class Point{
int x;
int y;
}
class Circle{
Point p = new Point();
int r;
}
단일상속
자바에서는 단일 상속만 허용한다.
Object 클래스
Object 클래스는 모든 클래스의 상위 클래스이다.
다른 클래스로부터 상속 받지 않는 모든 클래스들은 자동으로 Object 클래스를 상속받는다.
오버라이딩
상위 클래스로부터 상속받은 메소드의 내용을 변경하는 것, 상속받은 메소드를 그대로 사용하기도 하지만 필요에 따라 변경을 해야하는 경우 상위 클래스의 메소드를 오버라이딩 한다.
오버라이딩의 조건
- 이름, 매개변수, 반환타입이 같아야 한다.
- 접근제어자는 상위 클래스의 메소드보다 좁은 범위로 변경할 수 없다.
- 상위 클래스의 메소드보다 많은 수의 예외를 선언할 수 없다.
super
super는 하위 클래스에서 상속받은 멤버를 참조하는데 사용되는 참조변수이다.
멤버변수와 지역변수의 이름이 같을 때 this를 붙여서 구분했듯이 상속받은 멤버와 자신이 가지고 있는 멤버의 이름이 같을 때 super를 사용해서 구분할 수 있다.
super()
this()는 같은 클래스의 다른 생성자를 호출하는데 사용된다면, super()는 상위 클래스의 생성자를 호출하는데 사용된다.
Object클래스를 제외한 모든 클래스의 생성자 첫 줄에 this() 또는 super()를 호출해야 한다. 그렇지 않으면 컴파일러가 자동적으로 super()를 생성자의 첫 줄에 삽입한다.