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 라는 키워드를 사용함으로서 명확하게 표시하는 것입니다.
-
(•́ ✖ •̀)
알 수 없는 사용자
-
댓글 입력