✏️ 복습3

오가람·2022년 12월 25일

💡 메서드 오버라이딩

📌 메서드 오버라이딩이란❓

  • 부모클래스에게 상속받은 메서드를 재정의하여 사용 (덮어쓰기 개념)

📌 메서드 오버라이딩을 위한 조건

  1. 부모클래스의 메서드와 시그너처 및 리턴 타입 동일
  2. 부모클래스의 메서드보다 접근지정자는 같거나 넓어야 함

📍 메서드 오버라이딩의 메모리 구조



📌 메서드 오버라이딩과 접근지정자

  • 오버라이딩 시 자식클래스의 메서드 접근지정자는 부모의 접근지정자보다 같거나 커야 함

💡 오버라이딩(Overriding)과 오버로딩(Overloading)

📌 오버라이딩(Overriding)

  • 자식 클래스가 상속 받은 부모 메소드를 재작성 하는 것
  • 특징
  1. 메소드 헤드라인 위에 반드시 @Override 표시
  2. 접근 제어자를 부모 것보다 같거나 넓은 범위로 변경 가능
  3. 부모 메소드의 예외처리 클래스 처리범위보다 좁은 범위로 예외처리 클래스 수정 가능
  • 성립조건
  1. 메소드 이름 동일
  2. 매개변수의 개수, 타입, 순서 동일
  3. 리턴 타입 동일
  4. private 메소드 오버라이딩 불가

📌 오버로딩(Overloading)

  • 한 클래스 내에서 같은 이름의 메소드를 여러개 정의하는 것
  • 성립조건
  1. 같은 메소드 이름
  2. 다른 매개변수 선언부(매개변수 타입, 개수, 순서)
  • 주의사항
    메소드의 리턴타입은 오버로딩 조건과 관계 없음

💡 필드와 static 멤버(필드/메서드)의 중복

💬 인트턴스 필드도 오버라이딩이 가능할까❓

👉 ❌ 인스턴스 필드는 오버라이딩이 되지 않음

💬 static 필드도 오버라이딩이 가능할까❓

👉 ❌ static 필드는 오버라이딩이 되지 않음

💬 static 메서드도 오버라이딩이 가능할까❓

👉 ❌ static 메서드는 오버라이딩이 되지 않음

💡 super와 super()

📌 super

  • 상속을 통한 자식 클래스 정의 시 해당 자식 클래스의 부모 객체를 가리키는 참조변수 자식 클래스 내에서 부모 클래스 객체에 접근하여 필드나 메소드 호출 시 사용

📌 super()

  • 부모 객체의 생성자를 호출하는 메소드로 기본적으로 후손 생성자에 부모 생성자 포함
  • 후손 객체 생성 시에는 부모부터 생성이 되기 때문에 후손 클래스 생성자 안에는 부모 생성자를 호출하는 super()가 첫 줄에 존재 (부모 생성자가 가장 먼저 실행되어야 하기 때문에 명시적으로 작성 시에도 반드시 첫 줄에만 작성)
  • 매개변수 있는 부모 생성자 호출은 super(매개변수, 매개변수)를 넣으면 됨

💡final 예약어

- final 클래스 : 상속이 불가능한 클래스

- final 메소드 : 상속시 오버라이딩이 불가능한 메소드

profile
개발자준비생

0개의 댓글