기본예제)
class MyPoint3 {
int x;
int y;
String getlocation() {
return "x:"+x+", y:"+y;
}
}
class My3D extends MyPoint3 { // 상속받고
int z;
String getlocation() { // 그 클래스의 메소드를 받아서 덮어쓴다.
return "x:"+x+", y:"+y+", z:"+z;
}
}
public class OverrideTest {
public static void main(String[] args) {
// 오버라이딩 테스트
My3D p = new My3D();
p.x = 3;
p.y = 5;
p.z = 7;
System.out.println(p.getlocation());
}
}
x:3, y:5, z:7
-> 업그레이드!!
class MyPoint3 {
int x;
int y;
String getlocation() {
return "x:"+x+", y:"+y;
}
}
class My3D extends MyPoint3 { // 상속받고
int z;
String getlocation() { // 그 클래스의 메소드를 받아서 덮어쓴다.
return "x:"+x+", y:"+y+", z:"+z;
}
// Object클래스의 toString()을 오버라이딩
// public이 붙은 이유 : toString()메소드가 원래 public이 붙어있기 때문에
// 선언부가 똑같아야 하므로
public String toString() {
return "x:"+x+", y:"+y+", z:"+z;
}
// 생성자
My3D(int x, int y, int z) {
this.x = x;
this.y = y;
this.z = z;
}
}
public class OverrideTest {
public static void main(String[] args) {
// toString()을 오버라이딩
My3D p2 = new My3D(3,5,7);
System.out.println(p2.getlocation());
System.out.println(p2.toString());
System.out.println(p2);
}
}
x:3, y:5, z:7
x:3, y:5, z:7
x:3, y:5, z:7
- 선언부가 조상 클래스의 메소드와 일치해야 한다.
- 반환타입, 메소드명, 매개변수 목록
- 즉 구현부만 달리 해야 한다.
- 접근제어자를 조상 클래스의 메소드보다 좁은 범위로 변경할 수 없다.
public
,protected
,(default)
,private
- ✨조상보다 같거나 넓게
- ✨예외(Ch08) 는 조상 클래스의 메소드보다 많이 선언할 수 없다.
- ✨조상보다 같거나 적게
public String toString() {
}
-> 나중에 사용할 때
참조변수
만 사용! 😉
-> JAVA23_오버로딩
class Parent{
void parentMethod() {}
}
class Child extends Parent{
void parentMethod() {} //오버라이딩
void parentMethod(int i) {} //오버로딩
void childMethod() {} //메소드 정의
void childMethod(int i) {} //오버로딩
void childMethod() {} //에러: 중복 정의
}