JAVA 상속
JAVA 상속이란?
일단 모든 클래스는 Object클래스의 후손이다. 그래서 java.lang.String 클래스의 equals()와 toString은 따로 선언하지 않아도 사용할 수 있다.
현실세계의 부모가 자식에세 물려주는 상속과 같은 개념이다.
부모클래스에서 작성된 메소드와 필드변수를 사용할 수 있다. 단 부모클래스에서 작성된 생성자와, 초기화 블록은 상속되지 않는다.
부모클래스의 생성자 vs 자식 클래스의 생성자가 붙으면 -> 부모클래스가 이긴다. (부모클래스 생성자가 먼저 실행되고 자식클래스 생성자가 실행된다.)
위의 이야기는 기본생성자일때 이야기이고 만약 부모클래스 생성자에서 필드초기화를 위해 매개변수를 넣어놓은경우
자식 클래스 생성자에 super(); 을 사용해서 부모클래스의 매개변수를 넣어줘야한다.
또 부모클래스 필드에 private로 선언된 멤버는 상속은 되지만 직접 접근이 불가능 하기 때문에 super()을 이용하여 전달받은 값을 부모 생성자 쪽으로 넘겨서 생성해야한다. 아니면 setter, getter도 가능하다
요약하면 this. 은 자기자신만 가능하고 super은 부모클래스를 부르는 느낌이다.
문법은 부모 클래스 이름이 class Man 일때 자식클래스에는 class BusinessMan extends Man 으로 굵은 글씨가 추가된다.
다른 상속법으로는 가지고 있는 상속이 있다
public class Circle extends shape{
private point center = new point();
}
public class point{
private x;
private y;
}
위 같은 경우가 has a 의 상속이다.
상속의 장점
중복된 코드나 겹치는게 있다면 부모클래스로 만들어서 관리해줄 수 있다.
위와 같은 효과로 코드를 공통으로 사용하기 때문에 같은 코드나 변수를 두 번씩 작성할 필요가 없고
나중에 수정하거나 추가하기 매우 좋다는 장점이 있다.
상속의 특징
- 클래스간의 상속에서는 다중 상속이 불가능하다. 다만 체인으로 연결한 것 처럼 상속은 가능하다. 예) A->B->C->D 처럼 은 가능하다. 다만 A->B, C 로 상속은 불가능하다.
- 부모클래스에서 protected로 정의되어 있는 필드는 자식 클래스에서도 사용이 가능하다.
- 자식객체는 부모클래스에 있는 메소드도 사용이 가능하다.
- 부모클래스에 정의된 기능이 자식클래스에서 변경이 필요하다면 @override로 변경해서 사용이 가능하다.
- 눈에는 보이지 않지만 우리가 만드는 모든 클래스들은 Object라는 부모가 있다. 모두 Object라는 신(god) 같은 존재로부터 상속받는다고 생각하고 있으면 된다.