[Java] 7. 상속
상속
이전 포스팅에서 상속에 관한 여러 용어들이 나왔는데 상속에 관해 다뤄보겠다.
상속이란 다른 클래스가 가지고 있는 멤버를 새로 작성할 클래스에서 번거롭게 만들지 않고 상속을 받아
자신의 멤버처럼 사용할 수 있게 하는 기능이다.
상속은 클래스의 재사용과 연관된 클래스들의 공통적인 것을 정의하며
적은 양의 코드로 새로운 클래스를 작성가능하게 하는 장점을 가진다.
또한 코드를 공통적으로 관리해서 코드를 추가로 작성한다던가 변경할 수 있고 코드의 중복이 사라지기 떄문에
프로그램의 생산성과 유지보수에 매우 큰 도움을 준다.
우리가 사용하는 모든 클래스는 전부 Object클래스의 후손이다.
그리고 조상클래스의 생성자는 상속이 안되고 만약 부모 클래스 생성자를 호출하고 싶으면 super()를 사용해야한다.
super()는 아래에서 더 설명하도록 하겠다.
조상의 private멤버는 상속은 가능하지만 직접적으로 접근은 불가능하다. 이전에 익힌 setter와 getter 메소드를 이용하거나
super()를 이용하여 조상의 필드값을 조상의 생성자로 넘겨 생성해야한다.
상속의 방법은 extends를 사용한다.
표현식은 아래와 같다.
[접근제한자] class 클래스명 extends 클래스명{}
상속에는 단일 상속과 다중 상속이 있는데 자바에서는 단일 상속만 지원한다.
C++에서는 다중 상속이 가능하다고 한다.
위에서 말한 super()에 대해 더 알아보자면
super()는 조상 생성자를 호출하는 메소드인데 기본적으로 후손 생성자엔 조상 생성자가 포함되어 있다.
후손 객체 생성 시 부모부터 생성이 되기 때문에 반드시 첫줄에 작성해 주어야한다.
만약 매개변수가 있는 조상 생성자가 있다면 super(매개변수)를 작성하면 된다.
super.은 후손 클래스를 정의 할 때 조상 객체를 가리킬때 사용하는 레퍼런스 변수로 후손 클래스에서
조상 클래스 객체에 접근하여 필드나 메소드를 호출하고자 할 때 사용한다.
후손 클래스가 상속 받은 조상 클래스의 메소드를 재작성 하는것도 가능한데 이를 오버라이딩이라 한다.
오버라이딩을 사용할 때 메소드 헤드라인 위에 @Override를 작성해주면 오버라이딩이 맞는지 구별을 해주기도 한다.
조상 클래스와 메소드 이름, 매개변수 개수, 타입, 순서, 리턴 타입이 동일해야하고
private 메소드와 final 메소드는 오버라이딩이 불가능하다.
마찬가지로 final 클래스는 상속이 불가능하다.