1. 오버 로딩
하나의 클래스에 같은 이름의 메서드를 여러개 정의하는 것이다.
조건:
1) 메서드의 이름이 같아야한다.
2) 매개변수의 개수 또는 타입이 달라야한다.
3) 매개변수는 같고 리턴 타입이 다른 경우는 오버로딩이 성립되지 않는다.
대표적인 예시: System.out.println 메서드
void println()
void println(boolean x)
void println(char x)
void println(double x)
* 잘못된 예시
int add(int a, int b) { return a+b; }
long add(int a, int b) {return (long) (a+b); }
2. 오버라이딩
조상클래스로부터 상속받은 메서드의 내용을 상속받는 클래스에 맞게 변경하는 것이다.
조건:
1) 선언부가 같아야한다. (이름, 매개변수, 리턴 타입)
2) 접근 제어자를 좁은 범위로 변경할 수 없다.
- 조상의 메서드가 protected라면, 범위가 같거나 넓은 protected나 public으로만 변경할 수 있다.
3) 조상클래스의 메서드보다 많은 수의 예외를 선언할 수 없다.
class 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 ;
}
}
super(): 조상의 생성자
- 자손클래스의 인스턴스를 생성하면, 자손의 멤버와 조상의 멤버가 합쳐진 하나의 인스턴스가 생성된다.
- 조상의 멤버들도 초기화되어야 하기 때문에 자손의 생정자의 첫 문장에서 조상의 생성자를 호출해야한다.
- 직접 호출하지 않으면 컴파일러가 자동으로 super();를 생성자의 첫 줄에 삽입한다.
class Point {
int x;
int y;
Point() {
this(0,0);
}
Point(int x, int y){
this.x=x;
this.y=y;
}
}
class Point extends Object {
int x;
int y;
Point() {
this(0,0);
}
Point(int x, int y){
super();
this.x=x;
this.y=y;
}
}
** 오버로딩은 기존에 없는 새로운 메서드를 정의하는 것이고, 오버라이딩은 상속받은 메서드의 내용을 변경하는 것이다.
'Backend Study > Java' 카테고리의 다른 글
[JAVA] 제네릭 (Generic) (0) | 2023.02.06 |
---|---|
[JAVA]링크드리스트로 큐 구현하기 (Queue) (0) | 2023.02.06 |
[JAVA] JVM, JRE, JDK 차이 (0) | 2023.01.27 |
[JAVA] Garbage Collection (0) | 2023.01.26 |
[JAVA] 쓰레드, 프로세스, 멀티 쓰레드 (0) | 2023.01.26 |