张磊(Avraber)

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

1.继承
继承是创建一个子类,然后子类可以继承父类的属性;
当子类需要使用构造函数时,需使用关键字base来继承下属性;
在继承中,无论父类子类,用构造函数时,都需要创建一个无参构造方法进行重载,不然会出错;

2.里氏转换的原则
(1)子类直接赋值给父类(子类可以直接转化成父类)    // Person[] ps = { c1, a1, j1, k1 };   这是直接把子类的c1,a1,j1,k1直接赋值给父类;
(2)指向子类的父类,可以强制转化为对应的子类      // ((Chinese)ps[0]).SayHello;   这里就是把父类实例化出的ps强制转化成chinese子类;
is运算符,用来判断父类对象可否转化为子类对象     //  if( ps[i] is Chinese)
(3) is 的运用方法    对象 is 类型名
如果可以转换,就返回true,否则返回false
(4)例题见代码第7题
3.多态
(1)当子类与父类有相同方法(非重载),此时创建子类对象,成为子类隐藏了父类的方法 //这个时候就成就了多态
(2)在父类的方法前加上一个virtual,表示该方法会被子类所重写(替代)
(3)在子类方法前加上override,表示重写了父类方法(替代)
class USB
    { //定义一个父类USB
        public virtual void Insert()
        {
            Console.WriteLine("我是一个协议");
        }
    }
  class iPhone : USB
    { //定义子类,方法override覆盖了父类
        public override void Insert()
        {
            Console.WriteLine("充电和传送数据");
        }
    }
class Program
    {
        static void Main(string[] args)
        {
            USB usb = new USB();  //实例化一个父类叫usb
            usb = new iPhone();  //直接将子类的值赋值给父类
            usb.Insert();    //由于父类的方法被隐藏,这里调用的其实是子类的方法
        }
    }

posted on 2012-07-04 17:59  张磊(Avraber)  阅读(294)  评论(0编辑  收藏  举报