Hello

Java 오버라이딩(overriding)

by 볼빵빵오춘기

오버라이딩(overriding)

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

(선언부가 같아야한다. 구현부의 내용만 다르게 할 수 있다.)

 

예제 코드1

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

getLocation() Point(조상)에 있는 것을 그대로 쓰면 z를 쓰지못하니 오버라이딩해서 z를 추가 내용(=구현부)만 변경가능하다.

선언부는 변경이 불가하다.

 

예제코드2

더보기
class Point{
	int x;
	int y;
	
	String getLocation(){
		return "x : " + x +", y : " + y;
	}

}

class Point3D extends Point{
	int z;
	
}

public class OverrideTest{
	public static void main(Sting[] args){
		Point3D p = new Point3D();
		p.x = 3;
		p.y = 4;
		p.z = 5;
	
		System.out.println(p.getLocation());
	}

}

 

x : 3, y : 4

 

class Point{
	int x;
	int y;
	
	String getLocation(){
		return "x : " + x +", y : " + y;
	}

}

class Point3D extends Point{
	int z;

	// 조상의 getLocation()을 오버라이딩
	String getLocation(){
		return "x : " + x +", y : " + y + ", z : " + z;
	}
	
}

public class OverrideTest{
	public static void main(Sting[] args){
		Point3D p = new Point3D();
		p.x = 3;
		p.y = 4;
		p.z = 5;
	
		System.out.println(p.getLocation());
	}

}

x : 3, y : 4,z : 5

 

 

예제코드3

더보기
class Point{
	int x;
	int y;
	
	// Object클래스의 toString()을 오버라이딩
	// 밑에 코드에 public이 붙는이유는
	// Object클래스의 toString()에 public이 붙어있어 그것을 유지하기위해 붙임
	// 오버라이딩을 할려면 선언부가 똑같아야 하기때문
	public String toString(){
		return "x : " + x +", y : " + y;
	}

}


public class OverrideTest{
	public static void main(Sting[] args){
		Point p = new Point();
		p.x = 3;
		p.y = 4;
	
		System.out.println(p.toString());
		System.out.println(p);
	}

}

x : 3, y : 4

x : 3, y : 4

 

⇒ 참조변수.toString()을 하게 되면 오버라이딩전에는 참조변수의 주소가 출력이 된다.

⇒ println의 기능으로 참조변수만 넣으면 참조변수의 주소가 출력이 되었다.

 

오버라이딩의 조건

  1. 선언부가 조상 클래스의 메서드와 일치해야한다.
  2. 접근 제어자를 조상 클래스의 메서드보다 좁은 범위로 변경할 수 없다.
  3. 예외는 조상 클래스의 메서드보다 많이 선언할 수 없다.
더보기
조건1 - 선언부가 조상 클래스의 메서드와 일치해야한다.

 

조건3 (>> 예외에 가서 자세히 설명할 예정)

 

오버로딩 vs 오버라이딩

단어가 비슷하여 헷갈릴 수 있다.

오버로딩

기존에 없는 새로운 메서드를 정의하는 것! (new, 이름이 같을 뿐)

상속과는 관계가 없다.

 

오버라이딩

상속받는 메서드의 내용을 변경하는 것(change, modify)


 

아래 그림을 보면서 오버로딩과 오버라이딩을 구분해보자!

오버로딩 vs 오버라이딩 구분 문제

답확인 ↓

더보기
오버로딩 vs 오버라이딩 구분 답

⇒ 5번의 경우는 중복이기 때문에 error가 난다.

 

 

블로그의 정보

Hello 춘기's world

볼빵빵오춘기

활동하기