C# new 키워드

조회수 957회

파생된 클래스에서 기반 클래스에서 상속받은 메소드와 이름이 같은 메소드가 있을 경우, 따라서 기반 클래스에서 상속받은 메소드를 숨기고 싶을 경우, new 키워드를 통해 숨길 수 있다고 알고 있습니다.

    class myTest
    {

        public void Bark()
        {
            Console.WriteLine("멍멍");
        }
    }

    class Test : myTest
    {
        public void Bark()
        {
            Console.WriteLine("찍찍");
        }
    }

Test nTest = new Test();
Test.Bark();

전 new 키워드를 통해 기반 클래스의 메소드를 숨길 수 있다고 했으니, 원래는 숨겨지지 않지만, new 키워드를 통해 숨겨 주는 행위를 하는 것이니 위처럼 숨기지 않은 상태에서는

Test.Bark()를 하면 기반 클래스의 Bark 메소드가 호출될 줄 알았습니다만, 파생 클래스의 Bark()가 호출되어지는데 이러면 new 키워드를 쓰나 안쓰나 같은 효과 아닌가요 ? 컴파일러에서 자동으로 new 처리를 해서 결과가 같은 건가요 ?

무엇을 가린다는지 의미를 잘 모르겠습니다.

new 키워드를 몰랐다면 당연히 Test.Bark()이니 Test Class의 Bark() Method를 실행할 거라고 예측하겠지만, new 키워드가 숨긴다는 의미를 가지니, 안 쓰면 안 숨긴다는 의미로 해석이 되서요.

  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • Test nTest = new Test(); 에 쓰인 new는 그 의미가 다릅니다. 이 new는 Test 클래스의 인스턴스를 동적할당한다는 의미입니다. 작성자분이 말했던 new의 기능은 메소드 앞이나 변수 앞에 쓰입니다. 위의 코드를 예로 들자면 다음과 같이 씁니다.

        class Test : myTest
        {
            new public void Bark()
            {
                Console.WriteLine("찍찍");
            }
        }
    

    사실 이렇게 작성하지 않아도 Bark() 메소드는 감춰진 상태입니다. 다만 new 라는 키워드를 사용함으로서 명확하게 표시하는 것입니다.

    • (•́ ✖ •̀)
      알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)