黑马程序员-类和继承-学习笔记

来源:互联网 发布:海阳淘宝客服招聘信息 编辑:程序博客网 时间:2024/05/29 04:36
------- Windows Phone 7手机开发、.Net培训、期待与您交流! -------

面向对象的基本概念:

1、对象
2、类
面向对象的三大特性:
1、封装
2、继承
3、多态


封装:类似打包
理解:把一堆事物封装起来,留一个接口来调用。


封装的好处:
1、属性封装了字段
2、方法的多个参数封装成一个对象
3、将一堆代码封装到一个方法中
4、将一些功能封装到几个类中
5、将一些具有相同功能的代码封装到一个程序集(dll、exe)
6、对外提供统一的访问接口(属性名、方法名等)


继承:是指类与类之间的关系
Base Class > 基类 Derived Class > 派生类
Parent Class > 父类 Chile Class > 子类


如何判断一个继承关系是否合理: 子类 is a 父类。
父类类型变量转换子类类型变量,需要强转;反之,不需要强转,直接赋值。


为什么要继承,继承的好处:
1、子类继承父类的属性和方法,使创建子类变得很简单,实现了代码重用以及多态。
2、类的单根继承性、传递性、继承时构造函数的问题。
3、所有的类都直接或间接的继承自object,所有object是所有类的基类。


继承中构造函数问题:
1、继承的时候,构造函数不能被继承
2、子类的构造函数会默认调用父类的无参数的构造函数
3、如果父类没有无参数的构造函数,可以使用:base(),显示的去调用父类中的构造函数。
4、this作用之一:在当前类的构造函数后面通过:this()来调用当前类自己的其他构造函数。


继承中的注意事项:
一、protected:
只能在子类内部和当前类内部中使用
可以在类内部及所有子类中(内部)访问。


二、this和base的作用总结:
this:
1、作为当前类的对象,可以调用类中的成员。this.成员(调用成员,自己)
2、调用本来的其他构造函数。:this()(调用构造函数,自己)


base:
1、调用父类中的成员(调用成员,父类)base点不出子类独有成员。
2、调用父类中的构造函数(调用构造函数,父类)
3、当调用从父类中继承的成员时,如果子类没有重写则this.成员;与base.成员;没有区别。
  如果子类重写了父类成员,则this.成员;调用的是子类重写以后的。base.成员;调用的依然是父类的成员。
三、子类构造函数必须指明调用父类的哪个构造函数


对象初始化器介绍:
例:
class Program{static void Main(string[] args){QQ one = new QQ(){User="123456",Pass="a123456"};}}public class QQ{public string User{get;set;}public string Pass{get;set;}}

集合初始化器介绍:
例:
1、不使用集合初始化器
list<int> list = new list<int>();
list.Add(1);
list.Add(2);


2、使用集合初始化器
list<int> list = new list<int>(){1,2};


访问修饰符介绍
csharp中有五种访问修饰符:
1、private:
私有访问修饰符,只能在当前类内部访问。


2、protected
受保护的访问修饰符,只能在当前类内部,以及所有当前类的子类的内部。
如果是跨程序集的情况,只要继承了protected修饰符的类,同样可以访问到。


3、internal
只能在当前程序集内部访问。


4、protected internal
两者的并集,两者权限相加。
5、public
任何地方都可以访问


注意:
在类这个级别,不写访问修饰符默认为intemal.
在一个类中定义变量或者方法时,没有写访问修饰符,那么默认的访问修饰符为private.


虚方法实现多态介绍
1、将父类中的某一个方法标记为“虚方法”,使用virtual关键字。
例:public virtual void Say(){}
2、当父类一个方法是虚方法的时候,子类继承了父类,可以直接使用该方法,也可以重写该方法。
3、如果子类要重写父类中的方法,需要在子类的方法前,加overrid关键字,并且只能使用override关键字。
4、当一个父类里存储的是子类类型,则查看是否使用了虚方法,如果使用了虚方法,则调用子类中重写后的方法。


多态的常见形式
申明一个父类类型变量,指向子类类型变量。意义在于后续多态的使用。




类的静态成员,静态类的介绍
1、调用静态方法的时候必须通过类名直接调用,不能通过对象来调用静态方法,也就静态成员不需要实例化对象。静态成员在整个应用程序退出时,才释放资源,所以可以在整个应用程序中共享,尽量避免写静态字段或静态属性,最好只写静态方法。
2、一般情况,当一个类是一个工具类,里面都是方法。为了让用户调用的时候方便,不需要实例化对象,这时可以将该类标记为static类,此时该类中只能包含静态成员,不能包含实例成员。
3、当这个类需要被实例化的时候,如果这个类中有一个成员是所有对象都共享的数据,这时可以将该类中的这个成员标记为静态的,但该类还是一个实例类。
4、静态类不能被实例化,不能被继承。
5、静态类不能实现任何接口(因为接口中的成员都是实例成员)。
6、静态类不能实现多态。
7、静态类的本质abstract+sealed static
abstract的意思就是不能被实例化
sealed的意思就是不能被继承


密封类的介绍(*)
sealed关键字,让该类不能被其他类继承。
例:String类。.net系统中本身对字符串有很多特殊处理,防止其他类继承后造成混乱,类似这样的情况,就要使用密封类。
原创粉丝点击