2014-04-25 5 views
7

나와 나와 자바 프로그래머 인 친구가 상속에 대해 논의하고있었습니다. 같은 종류의 코드에 대해 다른 결과를 얻었을 때 대화가 거의 고조되었습니다. .NET에서 내 코드 : 기본 클래스에서C# 및 Java의 상속 차이점

쇼 :

using System; 
using System.Collections.Generic; 
using System.Text; 

namespace ConsoleDemo 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      Base objBaseRefToDerived = new Derived(); 
      objBaseRefToDerived.Show(); 

      Console.ReadLine(); 
     } 
    } 

    public class Base 
    { 
     public virtual void Show() 
     { 
      Console.WriteLine("Show From Base Class."); 
     } 
    } 

    public class Derived : Base 
    { 
     public void Show() 
     { 
      Console.WriteLine("Show From Derived Class."); 
     } 
    } 
} 

나에게이 결과를 제공합니다.

코드

public class Base { 
    public void show() { 
     System.out.println("From Base"); 
    } 
} 

public class Derived extends Base { 
    public void show() { 
     System.out.println("From Derived"); 
    } 

    public static void main(String args[]) { 
     Base obj = new Derived(); 
     obj.show(); 
    } 
} 

자바에서이 코드는 나에게이 결과를 제공하는 동안 :에서

파생

왜 .NET 기본 클래스의 기능과 자바를 호출 파생 클래스 함수를 호출? 누군가가이 문제에 답변하거나이 혼란을 해결할 수있는 링크를 제공하면 정말로 감사하겠습니다.

제공된 코드에 아무런 문제가 없음을 확인하십시오.

+3

csharp에서 재정의하지 않았습니다. –

+0

@SotiriosDelimanolis 그래서 자바에서는 자동으로 오버라이드되고있다. – Ravi

답변

8

차이점은 Java에서 "재정의"할 때 C# 버전에서 Show 메서드를 숨기는 것입니다.

public class Derived : Base 
{ 
    public override void Show() 
    { 
     Console.WriteLine("Show From Derived Class."); 
    } 
} 
0

모든 메소드가 오버라이드 (override) 등의 방법을 표시 할 필요가 없습니다 기본 에 의해 가상 자바에서 :

같은 동작을 얻으려면. C#에서와 같이 virtual 및 override 키워드를 지정해야합니다. 그렇지 않으면 사실상 새로운 방법입니다. 경고가 표시되며이 경고를 숨기려면 new 또는 override 키워드를 선택해야합니다.

참고 : Java에는 @Override라는 속성을 사용할 수 있지만 선택 사항입니다.