안녕하세요, 강사님. 강사님의 책 C# 교과서의 예제를 풀다가 궁금한 부분이 있어 문의 드립니다.
제가 인터페이스의 설명을 보고 이해한 바로는 인터페이스를 상속받는 클래스는 인터페이스의 멤버가 반드시 구현되어야 하기 때문에 인터페이스 멤버에 쓸 수 없는 public 액세스 한정자 또한 상속받은 클래스에서도 사용할 수 없다고 이해했습니다.
그래서 45.5 명시적 인터페이스 구현 예제처럼 public 액세스 한정자를 쓰면 오류가 나야 한다고 생각했습니다.
45.5 명시적인 인터페이스 구현
namespace NotUnderstoodYet
{
interface IDog
{
void Eat();
}
interface ICat
{
void Eat();
}
class Pet : IDog, ICat
{
public void IDog.Eat() => WriteLine("Dog"); //오류 발생 (public 한정자가 유효하지 않음)
void ICat.Eat() => WriteLine("Cat");
}
class Print
{
static void Main(string[] args)
{
Pet pet = new Pet();
((IDog)pet).Eat();
}
}
}
그런데 45.4 다중 상속 예제나 다른 예제에서도 인터페이스를 상속받은 클래스에서 public 액세스 한정자를 쓰더라구요.. 제가 개념을 잘못 이해한 것 같은데 아무리 찾아도 정확한 답을 알 수 없어 문의 드립니다. 어떤 이유로 public 액세스 한정자를 사용해도 오류가 나지 않는 건가요? 두 예제 간의 차이가 뭘까요?
45. 4 인터페이스를 사용한 다중 상속 구하기
namespace InterfaceInheritance
{
interface IAnimal
{
void Eat();
}
interface IDog
{
void Yelp();
}
class Dog : IAnimal, IDog
{
public void Eat() => WriteLine("먹다."); //실행 잘됨...
public void Yelp() => WriteLine("짖다.");
}
class InterfaceInheritance
{
static void Main()
{
Dog dog = new Dog();
dog.Eat();
dog.Yelp();
}
}
}