[Java]상속, 오버라이딩

dnjsrms.lee·2022년 6월 3일
0

Java

목록 보기
6/14
post-thumbnail

In Java

class 파일에서 interface파일을 상속 받을 때 → class (이름) implements (interface 이름)
class 파일에서 부모 class 파일을 상속 받을 때 → class (이름) extends (부모 class 이름)

이때 데이터 타입으로 어떤 형태가 올 지 모르기에 우리는 관례상 (이름)뒤에 를 붙인다.

<T extends 클래스>

  • T 자료형의 범위를 제한 할 수 있음
  • 상위 클래스에서 선언하거나 정의하는 메서드를 활용할 수 있음
  • 상속을 받지 않는 경우 T는 Object로 변환되어 Object 클래스가 기본으로 제공하는 메서드만 사용 가능

super()생성자

⇒ 부모의 생성자 호출

  • 부모의 생성자를 의미한다 → 눈에 안보일 뿐 실제 존재

  • 부모의 디폴트 생성자가 먼저 실행되게 되어있다

  • this()와 같은 맥락

  • 부모의 멤버변수가 상속 되기 전에 생성자에 의해 멤버변수가 먼저 초기화 된 다음에 상속이 되고 그다음에 내가 가진 변수를 내가 가진 생성자로 초기화 하는 것

  • 별도 언급이 없으면 자동 부모 생성자 호출 → 이때 부모 클래스에 생성자가 없다면? → super()를 사용하여 특정 생성자를 호출해야 함

  • 에러

    • 부모에게 비어있는 생성자가 없으면 에러가 뜸

      • 해결 방안
      1. 명시적으로 super()에 값을 넣어주면 됨 ex) super(8);
      2. 부모 클래스에 기본생성자를 만들어 주면 됨(오버로딩)

    생성자 연속 호출

  • 자식 클래스에서 객체 생성시 부모 클래스 생성자가 먼저 실행되는 것

  • → 부모의 멤버변수는 상속 전 초기화가 되어야 함. 그렇기 때문에 먼저 호출되는 것

final

  • final이 붙은 멤버변수는 상수가 됨
  • final이 붙은 메소드는 오버라이딩이 불가능함 - 더이상 변형시킬 수 없음
  • final이 붙은 클래스는 더이상 확장(상속)할 수 없음
  • 변수는 값을 바꿀 수 있지만, 상수는 바꿀 수 없음.
  • final로 인해 최소의 값을 한 번만 할당 가능. 이후 값을 변경하는 것 불가.
  • Define. 을 통해 사용 가능

오버라이딩(재정의)(오버로딩 - 중복정의)

: 상속 관계에서 이루어지는 형상

: 상위 클래스에 정의된 메소드의 구현 내용이 하위 클래스에서 구현 할 내용과 맞지 않는 경우 하위 클래스에서 동일한 이름의 메소드를 재정의 할 수 있다.

  1. 변수의 오버라이딩
    • 부모의 멤버변수를 자식 클래스에서 오버라이딩하면 부모의 변수는 상속되지 않음
  2. 매소드 오버라이딩
    • 메소드를 오버라이딩하면 상속되지 않는다 (메소드는 객체에 포함X, 멤버변수만 포함)
  3. 오버로딩 / 오버라이딩
    • 리턴값, 이름, 매개변수가 같은 메소드를 오버라이딩 하면 상속되지 않음(부모자식같의 똑같은 메소드 signature)
    • 이름과 리턴값이 같으나 매개변수의 갯수가 다르거나 타입이 다른 두개 이상의 메소드의 관계는 오버로딩
  4. 접근제한
    • 오버라이딩 했을 때 부모보다 접근제한이 확대되거나 똑같아야 함
    • 축소되는 것은 안됨 Ex)부모 default 자식 private → X

부모의 메소드와 같아야 하는 것

  • 반환값
  • 메소드이름
  • 매개변수의 function signature

접근제한

  • private 멤버변수
  • private 메소드
  • 메소드 앞에 final이 붙으면 오버라이딩 불가
profile
little by little slowly

0개의 댓글