2022. 5. 23. 23:55ㆍJava
◎ 오버라이딩
-> 조상 클래스로부터 상속받은 메서드의 내용을 변경하는 것
◎ 오버라이딩 조건
-> 오버라이딩을 하려는 메서드는 조상 클래스의 메서드와 자손 클래스의 메서드의 이름, 매개변수, 반환타입이 같아야 한다.
-> 접근 제어자는 조상 클래스의 메서드보다 좁은 범위로 변경할 수 없다.
-> 조상 클래스의 메서드보다 많은 수의 예외를 선언할 수 없다.
-> 인스턴스 메서드를 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;
}
}
-> 결과
★ 참고 및 출처
자바의 정석