이것을 컴파일하면 경고 CS0108이 있어야합니다.
경고를 무시하지 마십시오. 실제로, 경고보다는 컴파일로 컴파일을 설정할 수 있다면. 경고는 일반적으로 나쁜 점이나 불명확 한 점을 지적한 것입니다. 처음에는보기가 좋지 않거나 불분명 해 보이는 좋은 이유가있을 수 있으므로 오류가 아닙니다. 무시하는 대신 숨기기의 경우는 new
입니다.
당신이 여기에있는 것은 재정의가 아니지만, 예상했던대로 대체로 여기에 원하는 것이 대체됩니다. 이것이이 코드가 컴파일러 경고를 생성하는 이유 중 일부입니다.
내 프로그램은 실행하고 올바른 출력을 제공
어쩌면 그것은 맞습니다,하지만 재정의를 예상 경우가 정확하지 않습니다. 재정의하는 경우 두 가지 모두에 의해 "이것은 파생 된"결과를 가져야합니다.
사람들이 일반적으로 무시할 것으로 예상되기 때문에 잘못된 디자인입니다. A1.Mymeth
을 public new void Mymeth()
으로 변경하여 경고를 중지 할 수 있습니다.이 표시 방법은 "실제로이 문제를 잘못 처리 한 것입니다."라고 플래그를 지정하는 방법이지만, 자신을 설명해야한다면 나쁜 신호입니다. 숨어있는 메소드는 일반적으로 누군가 당신 밑에서 기본 클래스를 변경하면 손을 내밀 때 일종의 상호 운용성과 다른 매우 드문 경우가 있기 때문에 이름을 일치시켜야 할 때만 수행됩니다.
'a' 대신'InheritanceDemo' ('InheritanceDemo b = new A1();')로'b'를 선언하면 그것을 얻을 수 있습니다. – Dmitry