C#进阶学习第六天

1.面向语言的特点

1.1封装

把客观事物封装成类,并将类内部实现隐藏,保证数据完整性
字段设置为私有,通过属性机制get() 和 set() 方法来访问私有成员

1.2继承

1.通过继承可以复用父类的代码 (密封类不能继承,不能当父类)
2.子类将获得父类中所有的成员 (除了构造函数和析构函数不能继承!)

 public cat(string _name,int _age,double._jump,double,_time):base(_name,_age)
        {      jump= _jump;    time =_time;
        }; 

3.子类在写构造函数时通过base调用父类的构造函数 //注意前后参数一样

1.3多态

允许子类对象赋值给父类对象的一种能力,相同类型的对象调用相同的方法却表现出不同行为
前提:重写虚方法
定义:子类覆盖父类中的方法实现子类特有的行为
方法:用关键字virtual和abstract将父类的方法声明为虚方法后才可以重写,子类通过关键字override实现

 1.可以将子类对象赋值给父类引用
    Animal a = new cat ("li", 2, 2.2, 3.5);   a.print (); 
     1.打印出子类的print方法  a虽是父类类型的引用,但实际指向的对象为子类  
     2.执行时,根据实际对象的类型调用该对象中的“虚方法”  
     3.如果只是普通的父类子类同名方法,则调用父类的print方法
              
 2.用abstract修饰基类时,可以防止直接创建基类(抽象的概念)的实例,只提供一些成员
    public abstract class Animal{  }
               
 3.子类中重写的方法也是虚方法,不需要在加virtual关键字了
    cat:Animal  dog:cat  dog可重写cat里的print虚方法,而cat里的print不需要加virtual关键字
               
 4.用关键字sealed(密封类)来阻止子类继续重写该虚方法。
    cat:Animal  dog:cat  cat里的print前加sealed,dog将不能重写print方法
               
 5.sealed 和 virtual 不能放在一起  abstract 和 virtual 不能放在一起 因为都是实现虚方法,重了
    public abstract virtual void print();       //报错!
               
 6.用abstract修饰方法时,表示纯虚方法,没有函数体,函数头后直接加分号,但必须在子类中重写,否则出错
    纯虚方法只能存在于抽象类中,因为非抽象类可以创建实例,在调用纯虚方法时,它没有函数体,出错 
    public abstract class Animal{  public abstract void print();   }

 7.通过new关键字来隐藏父类中的同名方法          (不能实现多态,只能单纯的隐藏)
    public new void printt(){  console.writeline(“这是普通的函数方法”); }

 8.所有的类的父类都是 System.object
    object  t    =  new Animal();
    object  t2   =  new Cat()
 9.a是自定义类型,直接用console.writeline输出时,不知道什么内容,会输出p类型的完全限定名:
    Animal  a = new Animal(); console.writeline( a);    // li.animal
    console.writeline 输出对象时,自动调用对象的ToString方法,
    public override string ToString()
     {
       return string.Format(“name:{0} age:{1}”,name,age);
     }

注:
子类的初始化顺序
1.初始化子类的实例字段
2.调用父类的构造函数,初始化父类的成员
3.调用自己的构造函数,初始化自己的扩展成员

c#中不允许多继承

猜你喜欢

转载自blog.csdn.net/JingDuiTell/article/details/88734933