본문 바로가기
개인공부

오버로딩, 오버라이딩 정리

by 리승우 2022. 12. 15.

오버라이딩 vs 오버로딩 근본적 차이

오버로딩(overloading): 기존에 없는 새로운 메서드를 정의하는 것

오버라이딩(overriding): 상속받은 메서드의 내용을 변경하는 것

 

 

오버로딩 

한 클래스 내에 사용하려는 이름과 같은 이름을 가진 메서드가 있더라도,

매개변수의 개수, 또는 타입이 다르면 같은 이름을 사용해서 메서드를 정의할 수 있는 것

 

오버로딩 조건

  • 메서드 이름이 같아야 한다.
  • 매개변수의 개수 또는 타입이 달라야 한다.

왜 사용하는가?

  • 같은 기능을 하는 여러 메서드들을 한 이름으로 정의함으로써 얻는 장점
    • 메서드 이름 절약
    • 재사용성 증가



오버라이딩

조상 클래스로부터 상속받은 메서드의 내용을 변경하는 것

 

오버라이딩 조건

  • 이름이 같아야 한다.
  • 매개변수가 같아야 한다.
  • 반환타입이 같아야 한다.
  • 접근 제어자는 조상 클래스의 메서드보다 좁은 범위로 변경 할 수 없다. (대부분 같은 범위의 접근 제어자를 사용)
  • 조상 클래스의 메서드보다 많은 수의 예외를 선언할 수 없다.
  • 인스턴스 메서드를 클래스 메서드로 또는 그 반대로 변경할 수 없다. (static멤버는 자신이 정의된 클래스에 묶여있다고 생각)

 

 

super

  • 자손 클래스에서 조상 클래스로부터 상속받은 멤버를 참조하는데 사용되는 참조변수이다.
  • 조상의 멤버와 자신의 멤버를 구별하는데 사용된다는 점을 제외하고는 super와 this는 근본적으로 같다.
  • 조상 클래스에 선언된 멤버변수와 같은 이름의 멤버변수를 자손 클래스에서 정의하는 것이 가능하며 super를 이용해서 구별할 수 있다.
  • this와 마찬가지로 인스턴스메서드에서만 사용될 수 있다.

super()

  • 조상 클래스의 생성자
  • 자손 클래스의 인스턴스를 생성할 때 조상 클래스 멤버의 초기화 작업이 수행되어야 자손 클래스의 인스턴스가 조상 클래스의 멤버들을 사용할 수 있기 때문에 자손 클래스 생성자에서 조상 클래스 생성자가 호출되어야 한다.
  • Object 클래스를 제외한 모든 클래스의 생성자 첫 줄에 생성자, this() 또는 super()를 호출해야 한다, 그렇지 않으면 컴파일러가 자동으로 super(); 를 생성자의 첫 줄에 삽입한다.
  • 자손 생성자 첫 줄에 아무런 생성자도 호출하지 않으면 super()가 자동으로 생성되어야 하는데 조상 클래스에 기본 생성자가 정의되어 있지 않으면 에러가 발생한다. 

'개인공부' 카테고리의 다른 글

TCP & UDP  (0) 2022.12.18
Process & Thread  (0) 2022.12.17
JVM 구조 정리  (0) 2022.12.14
생성자와 변수의 초기화 정리  (0) 2022.12.13
객체지향 4가지 특징 정리 (OOP)  (0) 2022.12.12

댓글