충분히 쌓여가는
메서드 오버라이딩(overriding), toString을 사용하여 출력하기 본문
(메서드)오버라이딩(overriding)
상속받은 조상의 메서드를 자신에 맞게 변경하는 것
오버라이딩 되지 않은 것
getLocation() 오버라이딩 되지 않음
class Point { // 2차원
int x;
int y;
String getLocation() {
return "x :" + x + ", y :" + y;
}
}
class Point3D extends Point { // 3차원
int z;
}
public class overrideTest {
public static void main(String[] args) {
Point3D p = new Point3D();
p.x = 3;
p.y = 5;
p.z = 7;
System.out.println(p.getLocation());
}
}
x :3, y :5
오버라이딩 된 것
getLocation() 오버라이딩 됨
class Point { // 2차원
int x;
int y;
String getLocation() {
return "x :" + x + ", y :" + y;
}
}
class Point3D extends Point { // 3차원
int z;
String getLocation() { // 오버라이딩
return "x :" + x + ", y :" + y + ", z: " + z;
}
}
public class overrideTest {
public static void main(String[] args) {
Point3D p = new Point3D();
p.x = 3;
p.y = 5;
p.z = 7;
System.out.println(p.getLocation());
}
}
x :3, y :5, z: 7
toString을 사용하여 출력하기
1번 방법
class Point extends Object {
int x;
int y;
// Object 클래스의 toString()을 오버라이딩
public String toString() {
return "x :" + x + ", y :" + y;
}
}
public class overrideTest {
public static void main(String[] args) {
Point p = new Point();
p.x = 3;
p.y = 5;
System.out.println(p.x);
System.out.println(p.y);
}
}
3
5
2번 방법
class Point extends Object {
int x;
int y;
// Object 클래스의 toString()을 오버라이딩
public String toString() {
return "x :" + x + ", y :" + y;
}
}
public class overrideTest {
public static void main(String[] args) {
Point p = new Point();
p.x = 3;
p.y = 5;
System.out.println(p.toString());
}
}
x :3, y :5
3번 방법
생성자 사용
class Point extends Object {
int x;
int y;
Point(int x, int y) {
this.x = x;
this.y = y;
}
// Object 클래스의 toString()을 오버라이딩
public String toString() {
return "x :" + x + ", y :" + y;
}
}
public class overrideTest {
public static void main(String[] args) {
Point p = new Point(3, 5);
System.out.println(p);
}
}
x :3, y :5
오버라이딩 조건
1. 선언부가 조상 클래스의 메서드와 일치해야 한다
선언부(반환 타입, 메서드 이름, 매개변수 목록)
String getLocation() { } 부분
class Point { // 2차원
int x;
int y;
String getLocation() {
return "x :" + x + ", y :" + y;
}
}
class Point3D extends Point { // 3차원
int z;
String getLocation() { // 오버라이딩
return "x :" + x + ", y :" + y + ", z: " + z;
}
}
2. 접근 제어자를 조상 클래스의 메서드보다 좁은 범위로 변경할 수 없다
접근 제어자: public, protected, private, (default)
3. 예외는 조상 클래스의 메서드보다 많이 선언할 수 없다
class Parent {
void parentMethid() throws IOException, SQLEception { // 예외 2개
...
}
}
class Child extends Parent {
void parentMethod() throws IOException { // 예외 1개
...
}
...
}
'Java > 객체지향' 카테고리의 다른 글
참조변수 super (0) | 2023.06.07 |
---|---|
오버로딩(overloading) vs 오버라이딩(overriding) (0) | 2023.06.06 |
Object 클래스(모든 클래스의 조상), toString() 사용할 수 있는 이유 (0) | 2023.06.05 |
단일 상속(Single Inheritance) (0) | 2023.06.05 |
상속이냐 포함이냐 (클래스간의 관계 설정) (1) | 2023.06.05 |