오버라이딩 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 |
댓글