한 클래스 안에서 같은 메서드명을 가지지만 시그니처(인자의 개수, 타입)를 달리하여 중복으로 선언하는 것
public class Camera {
	public boolean takePhoto(int count) {
		System.out.println("Camera::takePhoto with 1 parameter");
	}
	public void takePhoto(int count, double ratio) {
		System.out.println("Camera::takePhoto with 2 parameter");
	}
}
public class Application {
	public static void main(String[] args) {
		Camera camera = new Camera();
		camera.takePhoto(2);  // Camera::takePhoto with 1 parameter
		camera.takePhoto(2, 0.75);  // Camera::takePhoto with 2 parameter
	}
}
상속했을 때 부모 클래스의 메서드 동작 방법을 변경(재정의)하여 우선 사용하는 것
public class Camera {
	public void takePhoto() {
		System.out.println("Camera::takePhoto");
	}
}
public class KodakCamera extends Camera {
	@Override
	public void takePhoto() {
		System.out.println("KodakCamera::takePhoto");
	}
}
public class Application {
	public static void main(String[] args) {
		Camera kodakCamera = new KodakCamera();
		kodakCamera.takePhoto();  // KodakCamera::takePhoto
		Camera camera = new Camera();
		camera.takePhoto();  // Camera::takePhoto
	}
}