forDevLife
[자바의정석] Chap 7. 객체지향 프로그래밍2 본문
1) 다시 한번, 오버로딩
- 한 클래스 내에 같은 이름의 메서드를 여러 개 정의하는 것을 '메서드 오버로딩'이라 함.
- 조건 :
-. 메서드 이름이 같아야 함.
-. 매개변수 개수 또는 타입이 달라야 한다.
-. 반환 타입은 오버로딩에 영향을 주지 않는다!
-. 예시 : println
- 매개변수가 여러 개일 때, 자료형의 순서가 서로 다른 경우도 오버로딩으로 간주
(long add(int a, long b) / long add(long a, int b)
2) 오버라이딩의 조건
- 조건 :
-. 메서드 이름이 같아야 함.
-. 매개변수가 같아야 한다.
-. 반환타입이 같아야 한다.
-. 요약하면, 선언부가 서로 일치해야 한다.
-. 다만 접근 제어자와 예외는 제한된 조건 하에서만 다르게 변경할 수 있다.
1) 접근제어자 : 조상보다 좁은범위로 변경 불가 (public > protected > default > private)
→ 조상 클래스의 접근 제어자가 protected라면, 자손은 public 아니면 protected여야 한다.
2) 예외 : 조상보다 많은 예외 선언 불가, 개수가 중요한게 아닌 해당 예외의 범위가 중요
→ 포괄하는 throws Exception는 자손에서 사용 불가하게 됨
3) 인스턴스메서드를 static(클래스메서드) 또는 그 반대로 변경할 수 없다.
4) 조상 클래스의 static을 자식 클래스의 static으로 정의 가능하다.
→ 이 경우, 각 클래스에 별개로 static을 정의한 것일 뿐 오버라이딩이 아니다.
→ static은 오버라이딩 불가, static 멤버는 자신들이 정의된 클래스에 묶여있는 것이기 때문.
→ 호출할 때는 '참조변수.메서드이름' (x) → '클래스이름.메서드이름' (o)
3) 오버로딩 vs 오버라이딩
다시 정리하자면,
- 오버로딩 : 기존에 없는 새로운 메서드를 정의하는 것(new)
- 오버라이딩 : 상속받는 메서드의 내용을 변경하는 것(change / modify)
4) Super
- 변수 / 메서드에 모두 사용 가능
- 자손에서 조상으로부터 상속받은 멤버를 참조하는데 사용되는 참조 변수
- 조상의 멤버도 자손의 멤버이므로, this로도 가능하나 멤버가 중복 정의되어 있을 경우에는 super 사용
public class SuperTest {
public static void main(String[] args) {
Child c = new Child();
c.method();
}
}
class Parent {
int x = 10;
}
class Child extends Parent {
int x = 20;
void method() {
System.out.println("x =" + x);
System.out.println("this.x =" + this.x);
System.out.println("super.x =" + super.x);
}
}
super는 메서드로도 호출 가능하다.
아래는 Point의 getLocation을 오버라이딩하는 Point3D 클래스에 대한 설명이다.
x, y는 Point에도 있는 내용이므로, 이를 재 사용하기 위해 Point3D에서 super를 통해 호출 가능함을 확인할 수 있다.
후에 Point 메서드가 변경되더라도, 상속받는 자식에 이게 자동으로 반영되므로 좋다.
public class SuperTest {
public static void main(String[] args) {
Point3D p3 = new Point3D();
System.out.println(p3.getLocation());
}
}
class Point {
int x;
int y;
String getLocation() {
return "x: " +x + ", y: " + y;
}
}
class Point3D extends Point {
int z;
String getLocation() {
return super.getLocation() +", z: " +z;
}
}
'Java' 카테고리의 다른 글
[자바의정석] Chap 7. 객체지향 프로그래밍4 (0) | 2020.12.28 |
---|---|
[자바의정석] Chap 7. 객체지향 프로그래밍3 (0) | 2020.12.28 |
[자바의정석] Chap 6. 객체지향 프로그래밍 (0) | 2020.12.01 |
java - annotation (0) | 2020.11.25 |
[생활코딩-자바입문] 핵심 요약 7 (0) | 2020.11.18 |