자바 상속 / 타입변환 / 다형성
상속
- 자식(하위,파생) 클래스가 부모 클래스의 멤버를 물려받는 것
- 자식이 부모를 선택해 물려받음 (자바는 다중상속을 허용하지 않는다 X)
- 상속 대상 : 부모의 필드 / 메소드
- 분리개발이 가능하다
- 반복된 코드의 중복을 줄인다
- 유지 보수가 편리하다
- 다형성 구현이 가능하다
- 부모클래스의 private 접근 갖는 필드와 메소드는 상속 대상에서 제외한다
클래스 상속(extends)
class 자식클래스 extends 부모클래스 { 필드/생성자/매소드 }
객체생성 없이 extends를 활용해 상속 (단 한개만 가능 다중X)
부모 생성자 호출 (super(···))
부모클래스에 기본생성자가 없다면
- 자식클래스에선 super(매개값a,b,·····); 을 사용
상속을 물려받으면 부모클래스의 필드와 메소드를 내꺼처럼 씀
this 와 super
this() 자기자신의 생성자 호출 →
super() 부모 클래스 생성자를 호출
{ 바로 다음에만 쓸 수 있음 / this()와 super()는 같이 쓸 수 없는 것
메소드 재정의(Override)
- 부모 클래스의 상속 메소드 수정하여 자식 클래스에서 재정의 하는 것
- 접근제한을 더 강하게 오버라이딩은 불가한다.
- 부모메소드를 숨기는 효과도 있음 (자식클래스에서는 재정의된 메소드만 호출)
- 자식클래스에서 수정되기 전 부모 메소드 호출 시 super 사용
- super.부모메소드();
Override 어노테이션
컴파일러에게 부모 클래스의 메소드 선언부와 동일한지 검사 지시
클래스 밑에 @Override
protected 접근제한자
다른 패키지일 경우에는 자식클래스만 접근을 허용한다
타입 변환과 다형성
- 타입변환 : 데이터를 다른 데이터 타입으로 변환하는 행위
- 부모객체 생성할 때 자식객체 활용
- 자식객체는 부모 타입으로 자동 타입변환
- 부모객체는 자동변환 되었을때, 자식 타입으로 강제타입변환
- 같은 타입이지만 실행결과가 다양한 객체를 이용할 수 있는 성질 (=하나의 타입에 여러 객체 대입)
⇒ 객체는 부품화가 가능하고, 한 클래스 타입을 상속한 클래스들이 모두 대입이 가능한 것)
매개변수의 다형성
클래스 타입일 경우 )
해당 클래스의 객체 대입이 원칙이나 자식 객체 대입하는 것도 허용 ( 자동타입 변환 / 매개변수의 다형성)
매개변수타입이 클래스인 경우, 부모클래스를 넣으면 상속관계의 자식클래스들이 연관되어 실행이 됨
강제 타입 변환
- 부모의 객체를 자식의 객체로 생성했을때, 부모의 객체를 자식타입으로 변환할 때 사용한다
- 부모타입이면 모두 자식 타입으로 강제 타입 변환할 수 있는 것 아님!
- A객체 instanceof B객체 : A객체를 B를 통해 만들었는지 확인
추상 클래스(abstract class)
실체 클래스들의 공통되는 필드와 메소드 정의한 클래스
- 추상 클래스 : public abstract calss 클래스 {
- 추상 메소드 : public abstract void 메소드();
new연산자를 사용하지 못해서 상속을 통해 자식클래스만 만들수 있음
추상클래스는 단독으로 객체 생성이 X (상속 받은 자식클래스를 놓고 작업해야함)
용도
자식클래스의 필드와 메소드 이름을 통일할 목적
실체 클래스를 작성할 때 시간 절약
실체 클래스 설계 규격을 만들고자 할 때
추상 메소드와 오버라이딩(재정의)
메소드 이름 동일하지만, 실행 내용이 실체 클래스마다 다른 메소드