Overriding(오버라이딩)

AnHyunDong·2022년 9월 26일
0

Java

목록 보기
1/4

Overriding(오버라이딩)

  • 상속받은 조상의 메서드를 자신에 맞게 변경하는 것
    • 선언부 변경 불가
    • 내용만 변경 가능

오버라이딩의 조건

  • 선언부가 조상 클래스의 메서드와 일치해야함

// 부모 메서드
class Point {
	int x;
    int y;
    
    String getLocation() { //부모 메서드와 자식 메서드가 일치해야함
    	return "x :" + x + ", y :" + y;
    }
}

// 자식 메서드
class Point3D extends Point {
	int z;
    
    String getLocation() { //부모 메서드와 자식 메서드가 일치해야함
    	"x :" + x + ", y :" + y + ", z :" + z;
    }
}
  • 접근 제어자를 조상 클래스의 메서드보다 좁은 범위로 변경할 수 없음
    • public > protected > private
  • 예외는 조상 클래스의 메서드보다 많이 선언할 수 없음
class Parent {
	void parentMethod() throws IOException, SQLException {
    }
}

class Child extends Parent {
    void parentMethod() throws IOException { //자식이 예외가 더 많아서는 안됨
    }
}

Overriding(오버로딩) vs Overloading(오버라이딩)

  • Overloading(오버로딩) : 기존에 없는 새로운 메서드를 정의하는 것(new) > 상속과 관계 X
  • Overriding(오버라이딩) : 상속받은 메서드의 내용을 변경하는 것(change, modify) > 상속과 관계 O
class Parent {
	void parentMethod() {}
}

class Child extends Parent {
	void parentMethod() {} //오버라이딩
    void parentMethod(int i) {} //오버로딩
    
    void childMethod() {} //메서드 정의
    void childMethod(int i) {} //오버로딩
    void childMethod() {} //중복 정의(에러)
}

코드


// 부모 메서드
class Point {
	int x;
    int y;
    
    String getLocation() {
    	return "x :" + x + ", y :" + y;
    }
}

// 자식 메서드
class Point3D extends Point {
	int z;
    
    String getLocation() {
    	"x :" + x + ", y :" + y + ", z :" + z;
    }
}

public class OverrideTest {

	public static void main(String[] args) {
		MyPoint3D p = new MyPoint3D();
		p.x = 3;
		p.y = 5;
		p.z = 7;
		System.out.println(p.getLocation());
	}

}

결과

  • 오버라이딩 이전 값

  • 오버라이딩 값

코드2

class MyPoint3 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) {
		MyPoint3 p = new MyPoint3();
		p.x = 3;
		p.y = 5;
		
		System.out.println(p);
		System.out.println(p.toString());
		System.out.println("p.x="+p.x);
		System.out.println("p.y="+p.y);
        // 이 4개는 모두 같은 뜻
		
	}

}

결과2

코드3

class MyPoint3 extends Object{
	int x;
	int y;
	
    //생성자
	MyPoint3(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) {
		MyPoint3 p = new MyPoint3(3,5);
		System.out.println(p);
		
	}

}

결과3

profile
사진은 남아 추억이 메모는 남아 스펙이 된다

0개의 댓글