构造方法
构造方法,是与类名相同,并且无返回值,不加void
构造方法的主要作用是创建对象并给对象赋初值
不带有参数的构造方法称为默认构造
构造方法可以带有参数进行重载, 如果要给对象赋具体的初始值时
可以在类里面写出带有参数的构造方法并调用
如果在类里面没有构造方法,当我们创建对象时,系统会自动生成一个默认构造供使用
如果类里面有带有参数的构造方法,调用默认构造时,必须显示的把默认构造写出来
面向对象三大特性:封装、继承、多态
封装
我们在创建对象时,不希望外部人为的来破坏对象所包含的字段的值,此时就需要把数据封装起来
具体的做法是:把成员字段用private字段修饰,这样外部就无法拿到字段并修改所存储的数据
同时把私有的字段改成属性,通过属性来修改字段的值,创建对象并初始化对象时
可以用带有参数的构造方法给字段赋初始值,把字段写成私有后,虽然在外部不能使用,但是在类的内部可以使用、
即类内部的方法可以调用类里面的私有字段
继承
当一个子类继承父类,会把父类里面的成员继承过来,
父类里面的成员如果用public修饰,称为共有继承,用private修饰称为私有继承
公有继承的成员在任何地方都能使用
私有继承过来的成员只能在分类内部使用,在类的额外面不能使用
protected继承过来的成员只能在父类和子类里面使用,类的外面不能使用
//里氏转换
SmallDog small = new SmallDog();
BigDog big = new BigDog();
stu.WalkDog(big);
stu.WalkDog(small);
//在处理数据时,为了使所处理的数据,类型达到统一,
//此时会把数据的类型统一写成父类的类型,这样就可以吧子类的对象直接赋值给父类
//里氏转换的第一个原则:把子类对象赋值给父类,但是调用类里面的成员时只能调用父类里面的子类里面的调用不到
Dog dog = small;
//里氏转换的第二个原则;把父类的对象转成子类,as
BigDog s =dog as BigDog;
if (s!=null )
{
s.BigDogBark();
}
//把值类型转换成引用类型的过程称为装箱
object obj = a;
Console.WriteLine(obj);
//把引用类型转换成值类型称为拆箱
int c=(int )obj;
多态
virtual override