메소드 재정의(@Override)
메소드 오버라이딩은 상속된 메소드의 내용을 재정의하는 것을 말한다.
메소드가 오버라이딩되었다면 부모 객체의 메소드는 숨겨지기 때문에, 자식 객체에서 메소드를 호출하면 오버라이딩된 자식 메소드가 호출된다.
class Shape {
public void shape() {
System.out.println("도형입니다.");
}
public void draw() {
System.out.println("도형을 그립니다.");
}
}
//상속관계에서 부모의 함수을 재정의하는것(바디만 달리하는것)
class Rectangle extends Shape {
public Rectangle() {
System.out.println("사각형 생성자");
}
@Override
public void draw() {
System.out.println("사각형을 그립니다.");
}
}
class Trangle extends Shape {
public Trangle() {
System.out.println("삼각형 생성자");
}
@Override
public void draw() {
System.out.println("삼각형을 그립니다.");
}
}
public class OverrideTest {
public static void main(String[] args) {
// 1번
Shape shape = new Shape();
shape.draw();
Rectangle rc = new Rectangle();
rc.draw();
Shape shape2 = new Rectangle();
shape2.draw();
}
}

메소드가 재정의되었다면 부모 객체의 메소드는 숨겨지기 때문에 자식 객체에서 메소드를 호출하면 재정의된 자식 메소드가 호출된다.
메소드 오버라이딩 할 때에 주의점
접근 제한을 더 강하게 오버라이딩 할 수 없다는 것은 부모 메소드가 public 접근 제한을 가지고 있을 경우 오버라이딩하는 자식 메소드는 default나 private 접근 제한으로 수정할 수 없다는 뜻이다.
반대는 가능하다. 부모 메소드가 default 접근 제한을 가지면 재정의되는 자식 메소드는 default 또는 public 접근 제한을 가질 수 있다.
오버로딩(Overloading)
오버로딩의 조건
1. 메서드 이름이 같아야 한다.
2. 매개변수의 개수 또는 타입이 달라야 한다.
메서드의 이름이 같다 하더라도 매개변수가 다르면 서로 구별될 수 있기 때문에 오버로딩이 가능한 것이다. 위의 조건을 만족시키지 못하는 메서드는 중복 정의로 간주되어 컴파일 시에 에러가 발생한다.
그리고 오버로딩된 메서드들은 매개변수에 의해서만 구별될 수 있으므로 반환타입은 오버로딩을 구현하는데 아무런 영향을 주지 못한다는 것에 주의
(이름이 cat인 메서드가 총 3개 있지만 매개변수의 유형과 개수가 다름)