프로그래밍/Java

[Java] 7. 상속

Jepetto 2023. 2. 21. 13:41

상속

이전 포스팅에서 상속에 관한 여러 용어들이 나왔는데 상속에 관해 다뤄보겠다.

상속이란 다른 클래스가 가지고 있는 멤버를 새로 작성할 클래스에서 번거롭게 만들지 않고 상속을 받아

자신의 멤버처럼 사용할 수 있게 하는 기능이다.

 

상속은 클래스의 재사용과 연관된 클래스들의 공통적인 것을 정의하며

적은 양의 코드로 새로운 클래스를 작성가능하게 하는 장점을 가진다.

또한 코드를 공통적으로 관리해서 코드를 추가로 작성한다던가 변경할 수 있고 코드의 중복이 사라지기 떄문에

프로그램의 생산성과 유지보수에 매우 큰 도움을 준다.

 

우리가 사용하는 모든 클래스는 전부 Object클래스의 후손이다.

그리고 조상클래스의 생성자는 상속이 안되고 만약 부모 클래스 생성자를 호출하고 싶으면 super()를 사용해야한다.

super()는 아래에서 더 설명하도록 하겠다.

 

조상의 private멤버는 상속은 가능하지만 직접적으로 접근은 불가능하다. 이전에 익힌 setter와 getter 메소드를 이용하거나

super()를 이용하여 조상의 필드값을 조상의 생성자로 넘겨 생성해야한다.

 

상속의 방법은 extends를 사용한다.

표현식은 아래와 같다.

[접근제한자] class 클래스명 extends 클래스명{}

 

상속에는 단일 상속과 다중 상속이 있는데 자바에서는 단일 상속만 지원한다.

C++에서는 다중 상속이 가능하다고 한다.

 

위에서 말한 super()에 대해 더 알아보자면

super()는 조상 생성자를 호출하는 메소드인데 기본적으로 후손 생성자엔 조상 생성자가 포함되어 있다.

후손 객체 생성 시 부모부터 생성이 되기 때문에 반드시 첫줄에 작성해 주어야한다.

만약 매개변수가 있는 조상 생성자가 있다면 super(매개변수)를 작성하면 된다.

 

super.은 후손 클래스를 정의 할 때 조상 객체를 가리킬때 사용하는 레퍼런스 변수로 후손 클래스에서

조상 클래스 객체에 접근하여 필드나 메소드를 호출하고자 할 때 사용한다.

 

후손 클래스가 상속 받은 조상 클래스의 메소드를 재작성 하는것도 가능한데 이를 오버라이딩이라 한다.

오버라이딩을 사용할 때 메소드 헤드라인 위에 @Override를 작성해주면 오버라이딩이 맞는지 구별을 해주기도 한다.

조상 클래스와 메소드 이름, 매개변수 개수, 타입, 순서, 리턴 타입이 동일해야하고 

private 메소드와 final 메소드는 오버라이딩이 불가능하다.

마찬가지로 final 클래스는 상속이 불가능하다.