오버라이딩
자바 질문 중에 단골로 나오는 오버로딩과 오버라이딩.. 오버라이딩은 저번에 공부를 했으니 오버라이딩을 공부해보았다. 기억하기 쉽게 오버로딩과 오버라이딩의 차이도 적어놨다. 그리고 상속에서 다루지 못한 super가 책에 함께 언급되어 같이 적어보았다. 이 두 개밖에 없어서 오늘의 공부 필기는 다른 포스팅에 비해 분량이 적을 것 같다.
오버라이딩은 상속받은 메소드의 내용을 변경하는 것이다. 부모 클래스에 존재하던 메소드가 현재 클래스에 맞지 않는 경우 재정의가 가능하다. 오버라이딩은 메소드의 내용만 새로 작성하는 것으로 조건이 몇 가지 존재하는데,
- 선언부(이름, 매개변수, 리턴 타입)가 같아야 한다.
- 접근 제어자(public, private 등)를 좁은 범위로 변경할 수 없다.
- 메소드의 인스턴스와 static 변환이 불가능하다.
오버로딩 VS 오버라이딩
- 오버로딩: 이름이 같지만 매개변수를 달리하여 함수를 새로 정의하는 것
- 오버라이딩: 함수의 내용을 자체를 재정의하는 것 (덮어 씌우는 느낌이다!)
super
조상 클래스로부터 상속받은 멤버를 참조할 때 사용하는 참조 변수이다. 상속받은 멤버와 자신의 클래스에 정의된 멤버의 이름이 같을 때는 super를 통해 구별이 가능하다.
class Main {
public static void main(String args[]) {
Child c = new Child();
c.method();
}
}
class Parent {
int x = 10;
}
class Child extends Parent {
int x = 20; // 조상인 Parent가 가진 멤버 변수 x와 이름이 같다!
void method() {
System.out.println(this.x); // 20
System.out.println(super.x); // 10
}
}
뜬금없지만 티스토리 코드 블록 너무 따닥따닥 붙어있다..ㅠ 스페이스바는 또 너무 넓고,, 스킨 편집으로도 안되고,,, 방법 아는 분 계시면 알려주세요..
super()
this()와 마찬가지로 생성자 역할을 하며, super()은 조상 클래스의 생성자를 호출하는 데 사용한다. 조상 클래스의 멤버 변수를 초기화할 때는 조상의 생성자를 통해 초기화해야 하므로 무조건 super()를 사용해야 한다.
- 무조건 첫 줄에 삽입해야 하는 것을 잊지 말자!
'Study > Java' 카테고리의 다른 글
[Java] 자바의 제어자 (0) | 2020.03.12 |
---|---|
[Java] 패키지와 import (0) | 2020.03.12 |
[Java] 자바의 상속 (0) | 2020.03.12 |
[Java] 변수의 초기화 (0) | 2020.03.10 |