面向对象学习笔记(基础)

基本概念

面向过程:结构化程序设计,我们在解决问题中,注重的是解决问题的每个步骤和过程。

面向对象(oop):注重的是在问题中涉及的那些对象,以及对象之间有哪些关系。

面向对象的优势:尽量把修改控制在一个小的范围。能轻松的应对修改。

核心思想

缺点

算法

面向过程

自顶而下,逐步分解,也就是把功能分解。

设计数据结构

扫描二维码关注公众号,回复: 1465693 查看本文章

编写基础代码,基于数据结构操作

一旦数据结构发生修改,必须就要修改操作的代码

可重用性差

可维护性差,维护的成本高

程序=数据结构+算法

面向对象

分解数据

数据和操作数据是一个整体

相对的优点

程序=对象+消息

数据修改,只涉及这对该数据的操作(封装)

可复用性好(继承)

可维护性好,维护的成本低

万事万物皆对象,对象是由静态的属性和动态的方法来组成的。

类:是一组具有相同属性和行为的对象的抽象。

消息:对象之间的通信和响应。

对象

一切皆对象

对象:由静态的属性和动态的行为组成。

面向对象程序设计:程序=对象+消息;适合开发大型的系统

结构化程序设计:程序=数据结构+算法,适合开发小型的,写底层的

面向对象的思路:存在的对象,对象的属性,对象的方法/行为/功能

类的定义与使用

类是一组对象的抽象

类的组成:成员变量、成员方法

成员变量的修饰词,面向对象封装的体现:

多态的体现:重写、重载等。

引用:

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这个方法。


猜你喜欢

转载自blog.csdn.net/qq_38314823/article/details/80540185