2. 오버라이딩
2.1 오버라이딩이란?
조상 클래스부터 상속받은 메서드의 내용을 변경하는것1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16class Point{
int x;
int y;
String getLocation(){
return "x : "+x+", y : " + y;
}
|
class Point3D extends Point{
int z;
String getLocation(){
return "x : "+x+", y : " + y+", z : "+z;
}
}
2.2 오버라이딩의 조건
메서드 선언부는 조상의 것과 완전 일치해야함.
자손 클래스에서 오버라이딩하는 메서드는 조상 클래스의 메서드와
- 이름이 같아야 한다.
- 매개변수가 같아야 한다.
- 리턴 타입이 같아야 한다.
- 접근제어자는 조상 클래스의 메서드보다 좁은 범위로 변경할 수 없다.
ex) 조상클래스의 메서드의 접근 제어자가 protected라면
자식클래스에서 오버라이딩 하는 메서드의 접근 제어자는 protected나 public 이어야함. - 조상 클래스의 메서드보다 많은 수의 예외를 선언할 수 없다.
- 조상 클래스의 메서드를 자손클래스에서 오버라이딩할 때
- 접근제어자를 조상클래스의 메서드보다 좁은 범위로 할 수 없다.
- 예외는 조상 클래스의 메서드보다 많이 선언할 수 없다.
- 인스턴스메서드를 static메서드로 또는 그 반대로 변경할 수 없다.
2.3 오버로딩 VS 오버라이딩
- 오버로딩(overloading) : 기존에 없는 메서드를 정의하는것(new)
- 오버라이딩(overriding) : 상속받은 메서드의 내용을 변경하는 것(change, modify)
1 | class Parent{ |
2.4 super
자손클래스에서 조상 클래스로부터 상속받은 멤버를 참조하는데 사용되는 참조변수.
조상클래스의 멤버와 자손클래스의 멤버가 중복 정의되서 구별해야 되지 않는 상황이면 super대신 this를 써도 됨.
static 메서드(클래스 메서드)에서는 사용 할 수 없다.
1 | class SuperTest{ |
실행 결과1
2
3x=20
this.x=20;
super.x=10;
2.5 super() - 조상클래스의 생성자
super()는 조상클래스의 생성자를 호출하는 생성자이다.
Object클래스를 제외한 모든 클래스의 생성자 첫 줄에는 생성자(같은 클래스의 다른 생성자 또는 조상의 생성자)를 호출 해야함.
그렇지 않으면 컴파일러가 super(); 를 자동으로 첫줄에 삽입.
- 클래스 - 어떤 클래스의 인스턴스를 생성할것인가?
- 생성자 - 선택한 클래스의 어떤 생성자를 이용해서 인스턴스를 생성할 것인가?