- 부모 클래스의 메소드를 자식 클래스에서 다시 재정의해서 사용하는 것
- @Override 어노테이션 붙임
- 자식클래스에서 메소드 오버라이딩은 부모의 메소드와 동일한 선언부를 가져야함
- 부모 클래스의 메소드가 private 접근 제한을 가지면 자식 클래스는 메소드를 오버라이딩 할 수 없다.
public class Animal {
private String name;
private String kinds;
public Animal() {
}
public Animal(String name, String kinds) {
this.name = name;
this.kinds = kinds;
}
public String bark() {
return "짖는다.";
}
}
public class Dog extends Animal {
private int weight;
public Dog() {
}
public Dog(String name, String kinds, int weight) {
super(name, kinds);
this.weight = weight;
}
@Override
public String bark() {
return "멍멍~ 짖는다.";
}
}
- 자식 객체에서 오버라이딩된 메소드를 호출하면 부모 객체의 메소드가 아닌 오버라이딩된 자식 메소드가 호출된다
- 부모 객체의 메소드는 삭제되는 것이 아닌 오버라이딩된 메소드에 의해 가려지게 됨
Dog dog = new Dog();
System.out.println(dog.bark());
- 자식 클래스 내부에서 오버라이딩된 부모 클래스의 메소드를 호출해야 하는 상황이 발생한다면 super를 통해서 부모 메소드를 호출할 수 있음
public class Animal {
private String name;
private String kinds;
...
public String bark() {
return "짖는다.";
}
}
public class Dog extends Animal {
private int weight;
...
@Override
public String bark() {
return "멍멍~ " + super.bark();
}
}