c#的方法重写和的java方法重写有什么区别
由于分不够了。只有30分。请教,拜谢
java代码
package example;class m1{ public int getInt() { return 0; }}class m2 extends m1{ public int getInt() { return 1; }}public class Override{ public static void main(String[] args) { m1 m = new m2(); m.getInt(); System.out.println(m.getInt()); }}//输出的是1,说明是调用的是m2的getInt()方法namespace test1{ class Override { public int getInt() { return 0; } } class InheritOverride : Override { public int getInt() { return 1; } } class G0 { static void Main() { Override i = new InheritOverride(); int j = i.getInt(); Console.Write(j);//输出的是0,说明调用的是父类的getInt()方法 Console.ReadKey(); } }}疑问:两种语言的重写机制有什么不同吗,C#只有用virtul,abstract,父类的对象才会指向子类的重写方法。而java不是的
//public new void Get(){}
}
class Program
{
static void Main()
{
YourClass y=new YourClass();
y.Get()//He is Son
MyClass m=y;
m.Get();//He is Son //输出:相比隐藏情况,调用的是子类的新实现
}
}
面象对象编程的重要特性之一,就是继承与多态,C#中的每一种类型都是多态的,而每一种类型的成员组成, 都是拥有(继承)父类上定义的成员与自身定义的成员,如果父类上的成员实现,并不适合自己的需要,子类就有 可能重写(替换实现)父类成员,实现自己的需求!C#语法要求父类成员必须虚的或抽象的,子类才可以重写(替换实现). 如果你不是在子类中重写而是在自身类型上定义了一个与父类同名的方法,此时,就需要new关键来隐藏基类的同名
成员,告诉编译器,这是你所希望的操作!当然,大多数的情况下,我们都是对基类成员进行重写,而不是进行隐藏操作!
成员有virtual修饰,又会有new(隐藏)修饰的存在,是应对程序的变化!以便不同库中的基类与派生类之间的版本控制可以不断向前发展,同时保持向后兼容.