Java

자바 상속 / 타입변환 / 다형성

lily_y 2023. 10. 3. 19:44

 

상속

  • 자식(하위,파생) 클래스가 부모 클래스의 멤버를 물려받는 것
  • 자식이 부모를 선택해 물려받음 (자바는 다중상속을 허용하지 않는다 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 (상속 받은 자식클래스를 놓고 작업해야함)

 

용도

자식클래스의 필드와 메소드 이름을 통일할 목적

실체 클래스를 작성할 때 시간 절약

실체 클래스 설계 규격을 만들고자 할 때

 

추상 메소드와 오버라이딩(재정의)

메소드 이름 동일하지만, 실행 내용이 실체 클래스마다 다른 메소드