JAVA_29_오버라이딩

charl hi·2021년 8월 17일
0

JAVA

목록 보기
29/53

오버라이딩 overriding

  • override 덮어쓰다
  • 상속받은 조상 메소드를 자신에 맞게 변경하는 것
  • 선언부는 변경불가, 똑같이, 구현부{}만 변경가능

기본예제)

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) 는 조상 클래스의 메소드보다 많이 선언할 수 없다.
    • 조상보다 같거나 적게


toString 오버라이딩


public String toString() {

}

-> 나중에 사용할 때


참조변수

만 사용! 😉



오버로딩 vs. 오버라이딩

오버로딩

  • 기존에 없는 새로운 메소드를 정의하는 것(new)
  • 상속과 관련이 없다!!
  • 매개변수만 다르게

-> JAVA23_오버로딩


오버라이딩

  • 상속받은 메소드의 구현부를 변경하는 것(change, modify)
  • 매개변수 똑같음!!

class Parent{
	void parentMethod() {}
}

class Child extends Parent{
	void parentMethod() {}	//오버라이딩
	void parentMethod(int i) {}	//오버로딩

	void childMethod() {}	//메소드 정의
	void childMethod(int i) {}	//오버로딩
	void childMethod() {}	//에러: 중복 정의
}



Ref

0개의 댓글

관련 채용 정보