특정 클래스가 가지는 일부 속성/행위를 다른 새 클래스에게 제공하는 것으로, 상속을 사용하게 되면 다음과 같은 이점이 생긴다.
자바에서는 부모 클래스를 슈퍼 클래스(super class)라고 부르고, 자식 클래스는 서브 클래스(sub class)라고 부른다. 그리고 상속 키워드로는 extends를 사용해 주면 된다.
class Porint { ... }
class ColorPoint extends Point { ... }
상속을 할 때 주의할 점은 아무 클래스는 상속하는 것이 아닌 연관된 클래스를 상속 받아야 한다. 그 기준으로 IS-A관계로, 상속을 고려하는 클래스가 ~중의 하나인 경우 적절한 상속 관계로 표현될 수 있다.
이런 기중 속에서도 헷갈리는 관계가 있는데 HAS-A 관계읻.이는 “~을 갖는”관계로 두 클래스 간 연관성이 있어 보이지만 실제로는 별로 연관성이 없다. 예를 들어 회원 명부 안에 학생 정보가 포함된 경우 회원 명부와 학생 정보가 연관되어 보이지만 사실은 독립적인 객체이다. 학생이 아닌 회원을 포함시키기 어렵기 때문이다.
어디서도 접근 불가능
같은 패키지에 있는 모든 클래스에서 접근 가능하다. 하지만 상속 관계인 클래스여도 패키지가 다르면 접근 불가능하다.
상속과 패키지 여부 상관없이 어디서든지 접근 가능하다.
같은 패키지의 다른 클래스에서는 public처럼 자유롭게 접근 가능하다. 다른 패키지에서는 상속 관계라면 자유롭게 접근 가능하지만, 상속 관계가 아니라면 private처럼 접근 가능하다.
즉, 같은 패키지인 클래스 + 상속 관계인 클래스
만 접근 가능한 것이다.
서브 클래스 객체가 생성될 때 슈퍼 클래스의 생성자도 함께 실행된다. 서브 클래스 안에 슈퍼 클래스의 생성자도 포함되어 있기 때문이다. 그리고 이들은 서로가 필요한 초기화 작업을 독립적으로 수행한다.
생성자의 호출 순서로는 부모 생성자가 먼저 실행된 후 서브 클래스의 생성자가 실행된다.
이 경우는 명시적인 부모 생성자의 호출이 없었기에 자동으로 호출되었다. 만약 명시적으로 부모 클래스를 호출하고 싶다면 super()를 이용하면 된다.
super() 사용시 주의할 점은 무조건 서브 클래스의 생성자 첫 줄에서 실행되어야 한다는 점이다.
또한 클래스의 접근지정자가 public인 경우 생성자도 public으로 선언해 줘야 오류 없이 접근 가능하다.
public class A {
public A(int a) { ... }
public A() { this(a) }
}
출처
명품 JAVA programming - 황기태, 김효수
https://www.youtube.com/사람만이