基本概念
面向过程:结构化程序设计,我们在解决问题中,注重的是解决问题的每个步骤和过程。
面向对象(oop):注重的是在问题中涉及的那些对象,以及对象之间有哪些关系。
面向对象的优势:尽量把修改控制在一个小的范围。能轻松的应对修改。
|
核心思想 |
缺点 |
算法 |
面向过程 |
自顶而下,逐步分解,也就是把功能分解。 设计数据结构 编写基础代码,基于数据结构操作 |
一旦数据结构发生修改,必须就要修改操作的代码
可重用性差 可维护性差,维护的成本高 |
程序=数据结构+算法 |
面向对象 |
分解数据 数据和操作数据是一个整体 |
相对的优点 |
程序=对象+消息 |
数据修改,只涉及这对该数据的操作(封装) 可复用性好(继承) 可维护性好,维护的成本低 |
万事万物皆对象,对象是由静态的属性和动态的方法来组成的。
类:是一组具有相同属性和行为的对象的抽象。
消息:对象之间的通信和响应。
对象:
一切皆对象
对象:由静态的属性和动态的行为组成。
面向对象程序设计:程序=对象+消息;适合开发大型的系统
结构化程序设计:程序=数据结构+算法,适合开发小型的,写底层的
面向对象的思路:存在的对象,对象的属性,对象的方法/行为/功能
类的定义与使用
类是一组对象的抽象
类的组成:成员变量、成员方法
成员变量的修饰词,面向对象封装的体现:
多态的体现:重写、重载等。
引用:
Point point = new Point();的含义是首先实例化一个对象(new Point()),然后定义一个引用,p指向这个实例,p=p1;并不是将实例p1赋值给实例p,而是改变了引用的关系。
赋值兼容,凡是在需要用到父类对象的地方,都可以用子类对象来代替
Dog dog = new Dog("旺财");
dog.shout();
hit(dog);
publicstatic void hit(Animal animal){
animal.shout();
}
final 用来修饰一个类,那么这个类不能被继承。
用final定义变量的时候,变量值只能在定义的地方修改,别的地方不能被修改。
类和抽象:
抽象:
提取实物的本质、共性的 属性和方法,忽略某些不必要的细节和个性的差异。
类的组成:成员变量和成员方法。
封装:
存在某个边界,边界之内的细节隐藏起来,只留下对外接口(如笔记本、手机、饮水机)
为什么使用封装?
(1)易用,简单
(2)安全
(3)易维护
继承
允许后代直接使用先辈的所有属性和行为。
为什么使用继承?
更好的实现了代码的重用。
多态
不同的对象接受到相同的消息,产生的响应不同
总结:面向对象是一种自然、朴素的方法,来源于生活。
Static:静态,静态代码块是在加载类的时候自动被执行,早于构造函数,静态的方法,面向的是整个类,不是某个对象,所以没有this。并且只能使用类名来调用,不能使用实例化对象去调用。
Final:修饰的类不能被继承,final修饰的变量不能被修改(也就是常量)。Final修饰的方法
构造函数
构造函数是在对象实例化时自动被系统调用,该函数名必须是独一无二的,对于一个类来说,是将类名作为函数名。
构造函数不需要程序员去定义返回值,他是系统自动决定的,void也不行。
函数重载
函数的重载由参数决定,也就是参数不一样。
重写:从父类那里继承过来,但是方法不符合自己要求,故将方法重写,重写只能针对方法体,不能是方法。
继承
继承是允许后台直接使用前辈直接拥有的。集成是一种代码重用的机制,使得代码更省略、更可靠、更高效。
接口
所有方法都是抽象方法
泛型
C#中的类模板
封装
给对象一个边界,将内部信息尽量的隐藏,只保留对外的操作接口。
优点:简单、安全
多态
接收到的消息是一样的,但做出的响应不同
例如每一种动物都有叫这个方法,但是不同的动物被打时发出的叫声是不一样的。
变量的作用域:
类级变量:可以通过类名.变量名拿到(public static String s = “”)一定要加static,如果不加,在别的类中无法拿到
方法级变量:作用于整个方法中
块级变量:只作用于某个块,比如if里,for循环里等
抽象类
抽象类的概念:只有是声明,没有实现。
比如:形状都能算面积和周长,但是没有具体的形状是不知道怎样计算的。因此当圆(三角形、正方形等)继承形状的计算面积和周长的方法时需要自己重写去实现。因此在形状里只需要声明这个方法,但不能实现。这样的方法叫做抽象方法,含有抽象方法的类叫做抽象类。
抽象类不能new,也就是不能实例化,它只能作为父类被继承,作用是:对后代进行规则,即凡是它的后代,必须实现它未实现的方法(也就是必须重写继承来的抽象方法)。
Abstract修饰抽象方法。
接口
所有的方法都是抽象方法的类叫做接口;所以在声明方法时,关键词abstract写不写都没关系,接口的定义关键词是interface,抽象类是class。
抽象类是用来被继承(extends)的,接口是用来被实现(implements)的。
接口也可以被继承,但是不需要实现它的全部方法。只需要实现有必要的就行。
垃圾回收:内存不够用时启用垃圾回收
静态:静态成员与一般成员有何区别?(一般是如果在整个项目中该成员已经固定,工具性的方法,不会改变了则定义为静态的)
一般成员是每个对象有一份数据,而静态成员是属于类的,即所有对象所共有的;
一般成员的访问方式:对象名.成员名,而静态成员的访问方式:类名.成员名。
静态代码块的执行早于构造函数。
静态方法只能访问静态成员,不能访问其他成员。
静态方法是属于类的,没有对象的概念。
静态成员没有this这个概念。
this(当前对象)是“这个”、“当前”的意思,每个成员方法都隐含this这个方法。