부모 클래스로부터 상속받은 메소드를 자식 클래스에서 재정의하는 것을 오버라이딩이라 한다. (오버라이딩하고자 하는 메소드의 이름, 매개변수, 리턴 값이 모두 같아야한다.)
class Person {
	void cry() {
		System.out.println("흑흑");
	}
}
class Child extends Person {
	@Override
	void cry() {
		System.out.println("잉잉");
	}
}
자바의 한 클래스 내에 동일한 이름을 가진 메소드가 있더라도 매개변수의 개수 또는 타입이 다르면 같은 이름을 사용해서 메소드를 정의할 수 있다.
class OverloadingMethods {
	public void print() {
		System.out.println("오버로딩1");
	}
	String print(Integer a) {
		System.out.println("오버로딩2");
		return a.toString();
	}
	void print(String a) {
		System.out.println("오버로딩3");
		System.out.println(a);
	}
	String print(Integer a, Integer b) {
		System.out.println("오버로딩4");
		return a.toString() + b.toString();
	}
}
| 구분 | 오버라이딩 | 오버로딩 | 
|---|---|---|
| 접근 제어자 | 부모 클래스의 메소드 접근 제어자보다 더 넓은 범위만 가능 | 모든 접근 제어자 사용가능 | 
| 메소드명 | 동일해야 함 | 동일해야 함 | 
| 매개변수 | 동일해야 함 | 달라야 함 | 
| 리턴형 | 동일해야 함 | 달라도 됨 | 
| 적용범위 | 상속 관계에서 적용 | 같은 클래스 내에서 적용 |