Q & A

시삽: 레드플러스 님 
게시판 이동:
 제목 : C# 교과서 인터페이스 예제 질문 있습니다.
글번호: 1120
작성자: 홍수정
작성일: 2023/11/21 오후 9:06:00
조회수: 2846

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


 

 
이전 글   다음 글 삭제 수정 답변 글쓰기 리스트

(댓글을 남기려면 로그인이 필요합니다.)

관련 아티클 리스트
  제       목 파일 작성자 작성일 조회
이전글 종이책 오탈자 관련 (1) - 여상익 2023-12-17 2315
현재글 C# 교과서 인터페이스 예제 질문 있습니다. - 홍수정 2023-11-21 2846
  Re : C# 교과서 인터페이스 예제 질문 있습니다. - 레드플러스 2023-11-22 775
다음글 종이책 오탈자 - 여상익 2023-11-16 2202
 
손님 사용자 Anonymous (손님)
로그인 Home