안녕하세요, 강사님. 강사님의 책 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();
        }
    }
}