자바의정석

[자바의 정석 - 기초편] ch7-7~9 오버라이딩

유호야 2022. 3. 18. 17:38
반응형

ch7-7 오버라이딩(overriding)

- 상속받은 조상의 메서드를 자신에 맞게 변경하는 것

매개변수와 같은 선언부는 변경 불가, 내용만 구현부만 변경 가능하다. 

package ch07;

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;
	}
}

public class OverrideTest {

	public static void main(String[] args) {
		Point3D p = new Point3D();
		p.x = 100;
		p.y = 200;
		p.z = 300;
		
		System.out.println(p.getLocation());
	}

}

 

새로 오버라이딩된 자손의 메서드가 호출된다.

상속받은 메서드의 내용을 나에게 맞게 변경할 수 있다.

package ch07;

class Point {
	int x; 
	int y;

	public String toString() {
		return "x: " + x + ", y: " + y;
	}
}

class Point3D extends Point {
	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 = 100;
		p.y = 200;
		p.z = 300;
		
		System.out.println(p);
	}

}

 

this.x = x;
this.y = y;


ch7-8 오버라이딩의 조건

* 규칙 외우기

1. 선언부가 조상 클래스의 메서드와 일치해야 한다. 
즉 반환타입, 메서드이름, 매개변수 목록이 모두 일치해야 한다.

2. 접근 제어자가 조상 클래스의 메서드보다 좁은 범위로 변경할 수 없다.

3. 예외는 조상 클래스의 메서드보다 많이 선언할 수 없다.

 


오버로딩 vs 오버라이딩

전혀 상관이 없다. 

오버로딩은 기존에 없는​ 메서드를 정의하는 것 (new)

오버라이딩은 상속받은 메서드의 내용을 변경하는 것 (change, modify)

반응형