Why are Java and C # different in oops?
•
Java
1) Why are the following codes different
C#:
class Base { public void foo() { System.Console.WriteLine("base"); } } class Derived : Base { static void Main(string[] args) { Base b = new Base(); b.foo(); b = new Derived(); b.foo(); } public new void foo() { System.Console.WriteLine("derived"); } }
Java:
class Base { public void foo() { System.out.println("Base"); } } class Derived extends Base { public void foo() { System.out.println("Derived"); } public static void main(String []s) { Base b = new Base(); b.foo(); b = new Derived(); b.foo(); } }
2) When moving from one language to another, we need to ensure a smooth transition
Solution
The reason is that in Java, methods are virtual by default In C #, virtual methods must be explicitly marked
class Base { public virtual void foo() { System.Console.WriteLine("base"); } } class Derived : Base { static void Main(string[] args) { Base b = new Base(); b.foo(); b = new Derived(); b.foo(); } public override void foo() { System.Console.WriteLine("derived"); } }
The c# code you publish hides the method foo in the derived class This is something you usually don't want to do because it causes inheritance problems
Using the class you publish, the following code will output different content, although it is always the same instance:
Base b = new Derived(); b.foo(); // writes "base" ((Derived)b).foo(); // writes "derived"
The fixed code I provided above will output "derived" in two cases
The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
二维码