<1>
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace list { class A { } class B : A { public A MyMthod() { //你想想看这个MyMthod()方法的返回值类型明明是A类型,为什么这里返回一个B类型对象也不报错呢? return new B(); //因为B类型是A类型的子类,子类对象可以隐式的转换成父类对象。这里已经将B类型隐式的转换成A类型并将它返回了。所以它不会报错。 } } class Program { static void Main(string[] args) { A a = new A(); B b = new B(); a = b; //子类对象可以赋值父类对象 //b = a; //父类对象不可以赋值给子类对象 b = (B)a; //举个例子:假如父类是 “人” 它有两个子类,一个“中国人”类,一个“美国人”类 //也就是说 new一个中国人的对象“李小龙” new一个美国人的对象“奥巴马” // new 一个 “人"的对象 "人1" //子类对象“李小龙”,“奥巴马”肯定是可以赋值给“人”这个父类对象人1的。因为“人1”可以是中国人,也可以是美国人,只要是人就可以了。这里你给我一个“李小龙”,或者“奥巴马”肯定是可以的。 //而父类对象 “人1”赋值给子类对象“李小龙”或者子类对象“奥巴马”就不可以了。 //因为“李小龙”是中国人类型 ,中国人类型就只能接收中国人类型,所以当你把一个“人”类型对象赋值给“中国人”类型对象的时候,就出错了。我管你要一个中国人,你给我一个人1。我怎么知道你这个“人1”是不是中国人呢?你也可能是美国人,也可能是德国人。对吧。 //除非 你给我指定说,这个人一定是一个中国人。“李小龙”=(中国人)“人1” } } }
时间: 2024-10-17 13:31:26