오버라이딩과 오버라이드, 다중상속에 관하여
1. 오버라이딩과 오버라이드의 차이점
오버라이딩은 슈퍼클래스에 이미 존재하는 서브클래스의 메서드에 대한 새로운 구현을 제공하는 프로세스를 말합니다. 하위 클래스의 메서드가 상위 클래스의 메서드와 이름, 반환 유형 및 매개 변수가 동일한 경우 하위 클래스 메서드가 상위 클래스 메서드를 재정의하고 해당 메서드가 인스턴스에서 호출될 때 상위 클래스 메서드 대신 하위 클래스 메서드가 호출됩니다.
반면에 오버로딩은 동일한 클래스 또는 다른 클래스에서 이름은 같지만 매개 변수는 다른 메서드에 대한 여러 구현을 제공하는 프로세스를 나타냅니다. 오버로드된 메서드가 호출되면 컴파일러는 메서드에 전달된 인수의 수, 형식 및 순서에 따라 호출할 구현을 결정합니다.
요약하면 재정의는 하위 클래스가 상위 클래스에서 상속된 메서드에 대한 자체 구현을 제공할 수 있도록 하는 반면, 오버로드는 클래스가 이름은 같지만 매개 변수가 다른 메서드에 대해 여러 구현을 제공할 수 있도록 합니다.
2. 다중상속
2-1. 다중상속이 안되는 이유
Java는 클래스의 다중 상속을 지원하지 않습니다. 다이아몬드 문제와 같은 여러 가지 복잡한 문제가 발생할 수 있기 때문입니다.
다이아몬드 문제는 하위 클래스가 공통 상위 클래스를 공유하는 두 개의 상위 클래스에서 상속될 때 발생합니다. 두 슈퍼클래스에 동일한 이름과 시그니처를 가진 메서드가 있는 경우 서브클래스는 어떤 구현을 사용할지 알 수 없습니다.
이 문제를 피하기 위해 Java는 클래스가 하나의 클래스에서만 상속하도록 허용하지만 여러 인터페이스를 구현할 수 있습니다. 인터페이스는 구현 세부 사항을 지정하지 않고 클래스가 구현해야 하는 일련의 메서드를 정의하는 방법을 제공합니다. 클래스는 여러 인터페이스를 구현할 수 있으므로 메서드 선언의 여러 소스에서 상속할 수 있습니다.
이 접근 방식은 여러 소스에서 구현 세부 정보를 상속하는 것과 관련된 복잡성 및 모호성을 도입하지 않고 다중 상속의 이점을 제공합니다. 또한 언어를 단순하게 유지하고 모호함으로 인한 오류나 버그의 가능성을 줄이는 데 도움이 됩니다.
2-2. 다중상속을 하려면?
Java는 클래스의 다중 상속을 지원하지 않지만 클래스가 다중 인터페이스를 구현할 수 있도록 허용합니다. 이 접근 방식을 "다중 인터페이스 상속"이라고도 합니다.
인터페이스는 클래스가 구현하도록 선택할 수 있는 추상 메서드 모음입니다. 여러 인터페이스를 구현하면 클래스는 구현 세부 정보를 상속하지 않고 메서드 선언의 여러 소스를 상속할 수 있습니다.