문제

다음과 같은 프로그램이 인쇄하는 이유

B
B

(해야 할 때)

public class A
    {
        public void Print()
        {
            Console.WriteLine("A");
        }
    }

    public class B : A
    {
        public new void Print()
        {
            Console.WriteLine("B");
        }

        public void Print2()
        {
            Print();
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            var b = new B();
            b.Print();
            b.Print2();
        }
    }

그러나 클래스 B에서 키워드 '공개'를 제거하면 :

    new void Print()
    {
        Console.WriteLine("B");
    }

인쇄를 시작합니다

A
B

?

도움이 되었습니까?

해결책

당신이 제거 할 때 public 액세스 수정 자, B를 호출하는 능력을 제거합니다. new Print() .의 방법 Main 이제 기본값으로 기능합니다 private. 더 이상 메인에 접근 할 수 없습니다.

나머지 옵션은 유일하게 액세스 가능한 구현이므로 A에서 상속 된 메소드로 돌아가는 것입니다. 다른 B 메소드 내에서 print ()을 호출하려면 B의 구성원이 개인 구현을 볼 수 있기 때문에 B 구현을 얻게됩니다.

다른 팁

당신은 Print 방법 private, 유일한 것은 사용 가능합니다 Print 방법은 상속 된 방법입니다.

외부에서는 새로운 b.print ()-메소드가 더 이상 보이지 않으므로 A.print ()가 호출됩니다.

그러나 클래스 내에서 새로운 B.print-method는 여전히 볼 수 있으므로 동일한 클래스의 메소드에 의해 호출되는 것입니다.

클래스 B에서 키워드 공개를 제거하면 새로운 인쇄 방법을 클래스 밖에서 더 이상 사용할 수 없으므로 메인 프로그램에서 B.print를 할 때 실제로 A에서 공개 메소드를 호출합니다 (B 때문에 B 때문에 공개 메소드가 가능합니다. 상속 A와 A는 여전히 공개적으로 인쇄되어 있습니다)

공개 키워드가 없으면 메소드는 비공개이므로 main ()에서 호출 할 수 없습니다.

그러나 print2 () 메소드는 비공개이더라도 자체 클래스의 다른 방법을 볼 수 있으므로 호출 할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top