首页 > 代码库 > 关于继承(子类对象与父类对象【相互转换】的过程)

关于继承(子类对象与父类对象【相互转换】的过程)

<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”

        }
    }
}



关于继承(子类对象与父类对象【相互转换】的过程)