오버라이딩

2022. 5. 23. 23:55Java

◎ 오버라이딩

-> 조상 클래스로부터 상속받은 메서드의 내용을 변경하는 것

 

◎ 오버라이딩 조건

-> 오버라이딩을 하려는 메서드는 조상 클래스의 메서드와 자손 클래스의 메서드의 이름, 매개변수, 반환타입이 같아야 한다.

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

-> 조상 클래스의 메서드보다 많은 수의 예외를 선언할 수 없다.

-> 인스턴스 메서드를 static메서드로, static메서드를 인스턴스 메서드로 변경할 수 없다.

 

◎ 오버로딩과 오버라이딩

-> 오버로딩 : 한 클래스 내의 같은 이름의 메서드를 여러 개 정의하는 것

-> 오버라이딩 : 상속받은 메서드의 내용을 변경하는 것

class Parent{
	void pMethod() {}
}

class Child extends Parent{
	void pMethod() {} // 오버라이딩
	void pMethod(int x) // 오버로딩
	void cMethod(int x) {} // 오버로딩
}

 

◎ super

-> 조상 클래스로부터 상속받은 자손 클래스에서 상속받은 멤버를 참조할 때 사용하는 참조 변수다.

-> 상속받은 멤버의 이름과 자신의 멤버의 이름이 같을 때 super로 구별한다.

-> static메서드에서는 사용할 수 없고, 인스턴스 메서드에서만 사용 가능하다.

-> 예제

public class SuperEx {

	public static void main(String[] args) {
		Child c = new Child();
		c.method();

	}
}

class Parent{
	int x = 3;
}

class Child extends Parent{
	int x = 7;
	
	void method() {
		System.out.println("x = " + x);
		System.out.println("this.x = " + this.x);
		System.out.println("super.x = " + super.x);
	}
}

-> 결과

☞ 위 코드에서 this.x는 자손 클래스의 멤버를 참조하고 super.x는 조상 클래스의 멤버를 참조한다.

-> 멤버 변수 외에도 메서드도 super로 호출할 수 있다.

 

◎ super()

-> super()는 생성자로 조상 클래스의 생성자를 호출하는데 사용한다.

-> 자손 클래스의 멤버가 조상 클래스의 멤버를 사용할 수도 있기 때문에 super()는 생성자의 첫줄에 선언되어야 한다.

-> 조상 클래스 생성자의 호출은 클래스 상속관계를 거슬러 올라가다가 최고 조상인 Object클래스의 생성자까지 가면 호출이 종료된다.

-> Object클래스를 제외한 모든 클래스의 생성자는 첫 줄에 꼭 자신의 다른 생성자나 조상의 생성자를 호출해야 한다.

호출하지 않으면 컴파일러가 생성자의 첫 줄에 자동으로 super();를 선언한다.

-> 예제

public class SuperEx2 {

	public static void main(String[] args) {
		B b = new B();
		System.out.println("b.x = " + b.x);
		System.out.println("b.y = " + b.y);
		System.out.println("b.z = " + b.z);
	}

}

class A{
	int x = 7;
	int y = 9;
	
	A(int x, int y){
		this.x = x;
		this.y = y;
	}
}

class B extends A{
	int z = 10;
	
	B(){
		this(70,90,100);		// B(int x, int y, int z) 호출
	}
	
	B(int x, int y, int z){		
		super(x,y);				// A(int x, int y) 호출
		this.z = z;
	}
	
}

-> 결과

 

 

★ 참고 및 출처

자바의 정석

https://www.aladin.co.kr/shop/wproduct.aspx?ItemId=76083001&partner=googlek&BSCPN=ORM&BSPRG=ADWORDS&BSCCN1=89221&utm_source=ADWORDS&utm_medium=cpc&utm_term=JAVA%C0%C7%C1%A4%BC%AE&gclid=Cj0KCQjwm6KUBhC3ARIsACIwxBh0GfDwaYEn-OxcsMebsH6l7xUyjucQnjB91bKGtzZvvFY8dkB1ULQaAnlhEALw_wcB

'Java' 카테고리의 다른 글

다형성(2)  (0) 2022.05.26
다형성(1)  (0) 2022.05.25
상속  (0) 2022.05.23
초기화 블럭  (0) 2022.05.23
생성자  (0) 2022.05.23