Java 제어자, 클래스 메소드 vs 인스턴스 메서드, 오버라이딩 조건

YangJiWon·2020년 6월 13일
0

Java

목록 보기
2/8

자바 함께 사용 못하는 제어자

클래스에 final과 abstract는 함께 사용할 수 없습니다.

  • final 제어자를 가지는 클래스는 다른 클래스가 상속받을 수 없게 되며, abstract 제어자를 가지는 클래스는 다른 클래스가 상속해서 오버라이딩해야만 사용할 수 있으므로, 이 두 제어자는 클래스에 함께 사용할 수 없습니다.

메소드에 static과 abstract는 함께 사용할 수 없습니다.

  • abstract 제어자를 가지는 메소드는 선언부만 있고 구현부가 없는 메소드인데, static 제어자를 가지는 메소드는 인스턴스를 생성하지 않고도 바로 사용할 수 있어야 하므로, 이 두 제어자는 메소드에 함께 사용할 수 없습니다.

메소드에 private과 abstract는 함께 사용할 수 없습니다.

  • abstract 제어자를 가지는 메소드는 다른 클래스가 상속하여 오버라이딩해야만 사용할 수 있는데, private 제어자를 가지는 메소드는 자식 클래스에서 접근할 수 없게 되므로, 이 두 제어자는 메소드에 함께 사용할 수 없습니다.

메소드에 private과 final은 함께 사용할 필요가 없습니다.

  • 메소드에 사용된 final 제어자와 private 제어자는 모두 해당 메소드가 오버라이딩을 통한 재정의를 할 수 없다는 의미를 가지므로, 둘 중에 하나만 사용해도 의미가 충분히 전달될 수 있습니다.

클래스 메소드와 인스턴스 메소드

  • static 키워드를 가지는 메소드를 클래스 메소드
  • static 키워드를 가지지 않는 메소드는 인스턴스 메소드

필드 초기화 순서

  1. 클래스 변수 : 기본값 -> 명시적 초기화 -> 클래스 초기화 블록
  2. 인스턴스 변수 : 기본값 -> 명시적 초기화 -> 인스턴스 초기화 블록 -> 생성자

오버라이딩의 조건

  1. 오버라이딩이란 메소드의 동작만을 재정의하는 것이므로, 메소드의 선언부는 기존 메소드와 완전히 같아야 합니다. 하지만 메소드의 반환 타입은 부모 클래스의 반환 타입으로 타입 변환할 수 있는 타입이라면 변경할 수 있습니다.

  2. 부모 클래스의 메소드보다 접근 제어자를 더 좁은 범위로 변경할 수 없습니다

  3. 부모 클래스의 메소드보다 더 큰 범위의 예외를 선언할 수 없습니다.

profile
데이터데이터데이터!!

0개의 댓글