码迷,mamicode.com
首页 > 其他好文 > 详细

面对对象

时间:2014-06-04 15:50:30      阅读:256      评论:0      收藏:0      [点我收藏+]

标签:c   a   int   get   文件   使用   

面向对象:OOP(object oriented programming)
什么是面向对象? 一种分析问题的方式
面向对象三大特征:封装,继承,多态 封装(隐蔽代码实现,复用,修改方便)
类,对象(抽象-具体)
类是模具,创建对象的模具,抽象的
类是一种数据类型,用户自定义的数据类型
类组成:字段、属性、方法、构造函数等
类里面包含两大类成员:
1.类的字段(由变量构成,一般非公有)
2.类的方法/属性/索引器

类就像楼房设计图纸,类的对象就是按照图纸建造的房子
类是用来描述事物的,对象是这灯事物存在的个体
类是针对具体存在的一种描述,对象是按照类的描述来创建一个可供我们使用的实例

创建两个不同的类的对象时,会共用一个方法 类的成员变量默认为私有的.

属性存在的目的就是为了设置访问和修改变量值的规则,还有一个目有是为了能够在持久化框架中,对应列的名字
持久化就是要将内存里的数据存入硬盘(数据库)
属性的本质就是两个方法(get,set)
如果属性里只定义了get代码块,是该属性叫做只读属性,只定义了set属性叫只写属性

访问修饰符 public private internal protected

构造函数:用来初始化对象
访问修饰符一般情况下是public,没有返回值类型,方法名与类名一样,在该类被new的时候调用,如果用户没有自定义构造函数,CLR会在运行时自动添加一个无参数的构造函数,若有自定义的,则不会自动添加,构造函数可以重载

命名空间-虚拟的文件夹系统
程序集就是一个硬盘,那么程序集里的命名空间就是硬盘里的文件夹,类就是文件夹中的文件

值类型变量 在内存的分配:
当变量是一个类的成员时,那么该变量是跟随类的对象存在堆中的,但对象引用断开时,等垃圾回收器进行清理时便被销毁
当变量一个方法的局部变量时,那么该变量是在方法被调用时,存在于栈中的,方法执行完毕立即销毁

this表示类的当前实例,代表类在堆里面的对象,可以在类中显示的调用类的构造函数(按照图纸建造一栋房子,房子里的this代表这栋房子,不代表图纸),当存在继承关系的时候,子类的this同时可以指向父类的非私有成员
base表示父类的实例,始终调用父类的方法 base就是存在于子类对象里,用来指向父类对象的指针

LSP里氏替换原则 Father fa = new Son(); 子类可以隐式的转换为父类
创建一个子类对象时,如果声明的类型是父类,则执行的是父类的方法,如果声明的子类类型,则先看子类中是否有此方法,没有则执行父类的方法
不能将父类对象强制转换成子类对象
而Son son = (Son)fa; 是可以的
简单工厂方法 最关键的是应用了里氏替换原则,及子类重写父类方法的技术,它能让开发者不用关心具体业务的实现,而只关心自己要实现的业务代码的编写
以返回子类对象的方法来使用,好处:父类不需要关心具体的实现,只要针对父类中能够访问到的成员来编写下面的代码就可以了
父类做参数方法
public ovid Test(父类 fa)
{
o.SayHi();//此方法中不关心传进来的对象上体方法的实现代码,只关心能调用什么方法
}
子类A son = new 子类A();
test(son); //将子类对象赋给父类

抽象方法与抽象类 abstract
抽象方法必须放在抽象类中,抽象类不能被实例化
继承于抽象类的类必须实现抽象类的抽象方法,除非继承类也是抽象类

当我们声明一个父类变量并指向NEW一个子类的时候,在内在中只有一个子类对象

类在第一次加载的时候,会产生一个方法表,类的对象中只存储成员变量,共用一个方法
如果子类与父类存在同名但没有重写关系的方法,调用时,如果是父类变量调用,则调用父类方法,如果是子类变量调用,则调用子类方法,若子类重写了父类的方法,则不管变量是什么类型,调用的都是子类的方法

CLR什么时候加载类
在第一次在代码中遇到这个类的时候,才加载类的静态成员信息,目的是节约资源,有可能这个静态资源一直不被访问,所以只有用到的时候才加载
静态成员:当所在类被第一次访问时,就自动初始化加载了
一个类第一次被访问的顺序:
静态成员加载(如果是静态字段,则在赋了初值的情况下加载)
静态构造函数执行
创建类的对象
调用类的非静态构造函数
一个类被N次访问的顺序
创建类的对象
调用类的非静态构造函数
一般在整个程序内部共享的数据 使用静态变量 当方法在整个程序中处于工具方法的时候,使用静态方法
静态类中只能包括静态成员,静态构造函数不能有参数,不能有访问修饰符(默认为private),静态构造函数只会在第一次被访问时加载一次,
静态类只能继承于object类,不能被继承 静态类不能实现接口,因为接口中的成员都是实例成员
sealed 密封类 无法被继承 静态类的本质就是一个abstract+sealed,不能被实例化,不能被继承

virtual 虚方法 抽象方法 abstract
虚方法必须有实现部分,抽象方法没有实现部分;
抽象方法必须在抽象类中声明,虚方法可以出现在抽象类中
抽象方法必须在子类中重写,虚方法可以被重写
抽象类只能用作基类,无法实例化
抽象类不能使用static修饰
抽象成员不能是私有的,因为必须被继承
抽象的意义主要是定制一个规则,而不是具体的实现(为了约束子类的行为),具体的实现交给子类完成
抽象类的作用就是为了让子类继承
抽象子类继承抽象父类,其实就是继承规则(子类本身可以添加新的规则)
抽象类即想约束子类的行为,也想传递一些父类的行为给子类
抽象类的特点:1.抽象类不能被实例化,只能被其它类继承2.继承抽象类的子类必须实现抽象类中的所有抽象方法3.抽象类就是了重写-多态

接口 interface 完全抽象的一种约定,接口就是用来实现的
接口的意义就是统一类的行为
接口只有方法,属性,索引和事件的声明,不能有字段
接口是用来实现的,所有成员默认为public,不能加修饰符
声明一个接口 要以I开头,结尾一般用able
接口弥补了类继承的单根性,接口是多继承的
接口是一种规范,为了多态
接口不能被实例化(接口是特殊的抽象类,抽象类中可能有抽象方法,实例化没有意义)

可以显式实现接口的成员 <接口名>.方法名(){ }
一旦显式实现的接口成员,那么就只能通过接口名来调用
如果一个类同时继承一个类和一个接口,必须把要继承的类写在前面

面向抽象编程,使用抽象(父类,抽象类,接口),不使用具体
在编程时,尽量使用 接口-抽象类-父类-具体类,使用单一职责原则

多态:为了程序的可扩展性 开放封闭原则(对修改封闭,对扩展开放)
同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果,这就是多态性。多态性通过派生类重载基类中的虚函数型方法来实现。
多态的作用:把不同的子类对象都声明为父类变量,可以屏蔽不同子类对象之间的差异,写出通用的代码,做出通用的编程,以适应需要的不断变化
多态的实现方式:
用父类实现
用抽象类实现
用接口实现

子类的访问级别不能比父类的高(因为会暴露父类的成员)

面对对象,布布扣,bubuko.com

面对对象

标签:c   a   int   get   文件   使用   

原文地址:http://www.cnblogs.com/wuchunhu/p/3764856.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!