본문 바로가기

개발 관련 지식/자바(Java)

[자바] 오버라이딩(Overriding)

* 오버라이딩

: 조상 클래스로부터 상속받은 메서드의 내용을 변경하는 것을 오버라이딩이라고 한다. 상속 받은 메서드를 그대로 사용하기도 하지만, 자손 클래스 자신에 맞게 변경해야 하는 경우가 많다. 이럴 때 조상의 메서드를 오버라이딩한다.

 

<예문>

package Exercise;

public class OverridingTest {

 /**
  * @param args
  */
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  Point3D p3 = new Point3D();
  p3.x = 10;
  p3.y = 20;
  p3.z = 30;
  System.out.println("result: ["+p3.getLocation()+"]");
 }

}

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

 

 

* 오버라이딩의 조건

자손 클래스에서 오버라이딩하는 메서드는 조상 클래스의 메서드와

1. 이름이 같아야 한다.

2. 매개변수가 같아야 한다.

3. 리턴타입이 같아야 한다.

 

 

* 오버로딩 - 오러라이딩

- 오버로딩(overloading) : 기존에 없는 새로운 메서드를 정의하는 것(new)

- 오버라이딩(overriding) : 상속 받은 메서드의 내용을 변경하는 것(change, modify)

 

 

* super

: 자손 클래스에서 조상 클래스로부터 상속받은 멤버를 참조하는데 사용되는 참조 변수이다. 멤버변수와 지역변수의 이름이 같을 때 this를 사용해서 구별했듯이 상속받은 멤버와 자신의 클래스에 정의된 멤버의 이름이 같을 때는 super를 사용해서 구별할 수 있다.

 

<예문>

package Exercise;

public class SuperTest {

 /**
  * @param args
  */
 public static void main(String[] args) {
  // TODO Auto-generated method stub
  Child c = new Child();
  c.method();
 }

}

class Parent{
 int x = 10;
}

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

 

 

* super() - 조상 클래스의 생성자

: this()와 마찬가지로 super() 역시 생성자이다. this()는 같은 클래스의 다른 생성자를 호출하는 데 사용되지만, super()는 조상 클래스의 생성자를 호출하는데 사용된다.

cf) Object 클래스를 제외한 모든 클래스의 생성자 첫 줄에는 생성자(같은 클래스의 다른 생성자 또는 조상의 생성자)를 호출해야 한다. 그렇지 않으면 컴파일러가 자동적으로 'super();'를 생성자의 첫 줄에 삽입한다.