상속(Inheritance)
Java 상속, 형변환, 재정의
상속
- 구현되어 있는 기능, 속성을
확장하여
재사용하는 것 - class B extends A{ }
- extends 뒤에는 하나의 클래스만 올 수 있다.
- 자바는 안정성을 위해 단일 상속만을 지원한다.
- 상속 하는 클래스 : 상위 클래스, parent class, child class
- 상속 받는 클래스 : 하위, child, sub
상속을 사용하는 경우
- 객체 지향 프로그래밍에서는 크게 2가지 방법을 사용할 수 있다.
IS-A 관계 (is a relationship : inheritance)
,HAS-A관계(composition)
- IS-A관계에서 상속을 사용한다.
- IS-A 관계
- 예시 : 포유류 - 인간, 호랑이, 사자 등
- 일반적인 개념과 구체적인 개념의 관계
- 뼈대를 구축하고 이를
확장해서 사용할 때
자주 사용된다. - 상속은 클래스간의 결합도가 높은 설계이다.
- 계층구조가 복잡하거나 hiearchy가 높으면 좋지 않다.
- HAS-A 관계
- 예시 : Java의 ArrayList 클래스를 사용하는 경우
- 클래스가 다른 클래스를 포함하는 관계 (변수로 선언)
- 코드 재사용의 가장 일반적인 방법
상속을 구현하는 경우
- 일반적인 클래스로부터 보다 구체적인 클래스를 생성하고 싶을 때 사용한다.
- 직업 (일반 클래스) - 개발자 (구체적인 클래스)
하위 클래스가 생성되는 과정
- extends로 하위클래스를 생성하면 상위 클래스가 먼저 생성된다.
- 하위 클래스의 생성자가 상위 클래스의 생성자를 호출하게 된다.
- 컴파일러가 하위 클래스의 생성자 내에
super()
를 자동으로 입력하여default 생성자
를 호출한다.생성자에 매개 변수가 존재할 경우,
super(매개변수)
를 이용하여 명시적으로 호출해주어야 한다.
형변환
상위 클래스로 변수를 생성하고 하위 클래스의 생성자로 인스턴스를 생성
상위 클래스 타입의 변수에 하위 클래스의 변수가 대입 (업 캐스팅)
메서드의 인자에 하위 클래스 타입을 넣어도 상위 클래스 타입으로 형변환이 가능하다.
하위 클래스는 상위 클래스의 타입을 내포하고 있으므로 묵시적 형변환이 가능하다.
1
2
3
4
5class B extends A {}
A instanceA = new B();
method(instanceB);
type method(A instanceA){}하위 클래스로 생성이 되었지만 type이 상위 클래스의 type이므로 하위 클래스에서 생성한 method 등에는 접근할 수 없다.
재정의 (Overriding)
- 상위 클래스에서 정의한 method를 하위 클래스에서 재정의하고 싶을 때 사용
- 메서드 정의 부분 (Function Signiture)은 동일하게 입력해야한다.
- 다르게 입력할 시 새로운 method를 정의하는 것처럼 해석된다.
- 사용법
@Override
를 Annotation으로 입력해준다.Annotation (주석)
- 컴파일러에게 특별한 정보를 제공해주는 역할을 한다.
- Override
- 재정의된 메서드라는 정보 제공
- FuctionalInterface
- 함수형 인터페이스라는 정보 제공
- Deprecated
- 이후 버전에서 사용되지 않을 수 있는 변수
- 메서드에서 사용된다.
- SuppressWarnings(“~”)
- 특정 경고가 나타나지 않도록함
상속(Inheritance)
You need to set
install_url
to use ShareThis. Please set it in _config.yml
.