# zb_java0725 **Repository Path**: climpeaker/zb_java0725 ## Basic Information - **Project Name**: zb_java0725 - **Description**: 面向对象概念 - **Primary Language**: Java - **License**: GPL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 5 - **Created**: 2018-07-25 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # zb_java0725 # 课堂笔记 ## 1 面向对象 ### 1.1 面向对象的思想 面向对象解决问题的出发点:找谁去做。【谁就是对象,对象由类进行规范定义】 面向对象核心思想:抽象、封装、继承、多态。 面向的目的:代码复用。 面向对象编程实现: (1)创建一个类; (2)编写属性; (3)编写行为方法; (4)在测试类中使用new创建一个该列的实例对象; (5)调用该实例的行为方法; ### 1.1 抽象 * 1 抽象概念 抽象:在面向对象的思想中,抽象适用于从一类个体中抽取他们的共性;反过来,这些共性可以描述这一类个体; 根据面向对象的思想,从以下两个维度进行抽象: 属性:使用成员变量进行描述;【编码实现:在类中定义成员变量】 行为:使用方法进行描述;【编码实现:在类中定义方法函数】 注意:抽象需要从问题域的角度进行抽象。也就是从业务角度进行共性抽象; * 2 封装概念 封装是一种思想; 在面向对象的思想中,封装就是将抽象的属性和行为以成员变量和成员方法的形式封装类中; 生么叫做对象? 在面向对象的世界中,万物皆对象; 对象是类的个体【具体对象】;类是对象的规范定义【抽象整体概念】; 类:使用java用来规范和描述对象的; 对象是用类来进行规范定义的; 对象和类的关系:个体和整体的关系; 什么是类? class就是java的类。 语法: 访问控制修饰符 其他修饰符 class 类名{ // 属性(成员变量) 访问控制修饰符 其他修饰符 数据类型 变量名; // 行为(成员方法) 方法函数定义的语法; } 解析: 成员变量是写在类中的加了访问控制修饰符的变量; 行为就是在类中定义的方法; 访问控制修饰符:public protected 默认的 private 一般的封装原则:属性使用private,行为使用public进行封装; 封装的另外一个特性是从访问控制修饰符体现出来的; 抽象封装的原则: 高内聚低耦合;【一个类的功能尽可能单一】 * 3 局部变量和成员变量 *局部变量:* 局部变量的概念: 定义在方法、语句体中的变量就是局部变量。【方法的形参也是局部变量】 局部变量的特点: (1)局部变量没有默认值; (2)局部变量在使用之前必须进行初始化赋值; (3)局部变量不能使用访问控制修饰符进行修饰; 局部变量的生命周期(作用域范围): 从局部变量声明开始到其所在的方法或语句块结束位置结束; 相同名字的局部变量的作用域范围不能重合;【在同一个作用域范围内,不能有同名的局部变量】 注意: 语句体是指 独立存在的一对{}就是一个语句体;也叫语句块; 语句块可以写在类中也可以写在方法体中; 使用语句块可以改变局部变量的作用域范围; *成员变量:* 成员变量概念: 定义在类中的变量就是该类的成员变量;【定义在类中的变量】 成员变量的特点: (1)成员变量有默认值【默认值和数组的默认值一样】 (2)因为有了默认值,使用之前不用初始化; (3)成员变量可以使用访问控制修饰符实现封装的目的; 成员变量的生命周期(作用域范围) 成员变量的生命周期是伴随该类的实例对象的生命周期而存在的; 作用域范围是整个类内部;【无论定义在类的开头还是末尾】 *成员变量和局部变量冲突* 当在一个类中,成员变量和局部变量同名时,发生冲突时,局部变量的优先级高于成员变量。 【同名的局部变量会覆盖同名的成员变量】 发生冲突时,可以使用this关键字引用成员变量的值;例如:this.成员变量 【this关键字指代当前类的实例对象】 原则: 局部优先原则。【范围最小优先原则】【就近原则】 代码[com.yuw.oop.Student]: ``` public void doStuding() { // 局部变量;同名的局部变量会覆盖同名的成员变量 String stuName = "小明"; System.out.println("I am studing..." + stuName); // 引用局部变量的值,就近原则,范围小优先原则 System.out.println("I am studing..." + this.stuName); // 使用this可以引用被覆盖的成员变量 } ``` * 3 成员变量的初始化赋值 根据面向对象的封装原则,成员变量一般使用private进行封装; 使用private进行封装的成员变量或方法在类的外部是无法直接访问的。【使用所属操作符.进行访问】 public修饰的成员变量或方法在外部可以直接访问;【后面会介绍访问控制修饰符的控制范围】 代码[com.yuw.oop.StudentTestDriver]: ``` /** * 面向对象的思想:抽象、封装 */ private static void test01() { String str00 = new String(); // 调用String类的方法 str00.trim(); // 使用new创建Student类的一个实例对象 Student stu00 = new Student(); // 调用Student类的方法 stu00.doStuding(); Student stu01 = new Student(); stu01.doGaming(); String strN = stu01.stuName;// 在类的外部可以访问public类型的成员变量 } ``` *成员变量初始化方式:* (1)为类的成员变量提供getter/setter接口【是一种固定格式的行为方法】 无需手写【类中右键---source---generate getters and setters】 get方法是用于获取类的属性的值; set方法是用于给类的属性进行赋值的; 代码[com.yuw.oop.StudentTestDriver]: ``` /** * 类的成员变量的getter、setter接口使用 */ private static void test02() { // 创建Student2的一个实例对象 Student2 stu20 = new Student2(); // 调用行为方法 stu20.doStuding(); // 调用set方法接口为私有属性进行赋值 stu20.setStuName("小明"); // 调用学习行为 stu20.doStuding(); System.out.println("当前学生姓名为:" + stu20.getStuName()); } ``` (2)使用构造方法进行成员变量的初始化【只能在new时执行一次】 #### 参与贡献 1. Fork 本项目 2. 新建 Feat_xxx 分支 3. 提交代码 4. 新建 Pull Request #### 码云特技 1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md 2. 码云官方博客 [blog.gitee.com](https://blog.gitee.com) 3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解码云上的优秀开源项目 4. [GVP](https://gitee.com/gvp) 全称是码云最有价值开源项目,是码云综合评定出的优秀开源项目 5. 码云官方提供的使用手册 [http://git.mydoc.io/](http://git.mydoc.io/) 6. 码云封面人物是一档用来展示码云会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)