# zb_java0728 **Repository Path**: llongyu/zb_java0728 ## Basic Information - **Project Name**: zb_java0728 - **Description**: 面向对象编程--四大关键字 - **Primary Language**: Java - **License**: GPL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 3 - **Created**: 2018-07-29 - **Last Updated**: 2020-12-17 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # zb_java0728 # 课堂笔记 ## 1 面向对象 ### 1.1 面向对象的思想 面向对象解决问题的出发点:找谁去做。【谁就是对象,对象由类进行规范定义】 面向对象核心思想:抽象、封装、继承、多态。 四个补充的关键字:static、final、abstract、interface 面向的目的:代码复用。 面向对象编程实现: (1)创建一个类; (2)编写属性; (3)编写行为方法; (4)在测试类中使用new创建一个该列的实例对象; (5)调用该实例的行为方法; ### 1.2 static、final、abstract、interface四大关键字 * 1 static关键字 static:是静态的关键字; 可以修饰的对象: 方法、语句块、属性【静态属性】; (1)static修饰方法叫静态方法; (2)static修饰符的语句块交静态语句块;【因为执行一次,一般用作初始化处理】 (3)static修饰的属性叫静态属性,也就类属性;【非static的属性也叫实例属性】 关键字的特性: (1)static修饰的静态方法只能调用静态方法或属性;非静态的方式都可以访问; (2)静态的方法或属性可以通过 类名.静态方法 名的方式进行访问; (3)由static修饰的对象是全类所有,全类所有的特点就是可以通过类名直接访问; (4)由static修饰的对象是在类被加载到jvm虚拟机的时候就进行分配内存和初始化处理; 非static的对象是在new时才进行内存分配和初始化; (5)由static修饰的对象用于域是全类所有,生命周期是从被jvm加载开始,到程序结束; (6)由static修饰的静态语句块在类被jvm加载时执行一次,并且只执行一次; 非静态的语句块是在new创建实例对象之前执行,并且每次创建时都执行一次; (7)静态方法中不能使用this关键字; (8)static方法没有多态;【父类和子类的同名的静态方法不构成多态】 注意: 教材P189页。考点:构造方法、语句块、静态语句块在继承的父子类中执行时的先后顺序; 代码[com.yuw.oop.staticdemo.*]: 参见包com.yuw.oop.staticdemo中的代码; * 2 final关键字 final关键字:是终结关键字; 可以修饰的对象有: 类、方法、变量(成员变量和局部变量) 关键字特性: (1)由final修饰的类叫终结类,该类不能够被其他类继承; (2)由final修饰的方法叫做终结方法,该方法不能够被子类重写;【final方法没有多态】 (3)由final修饰的变量叫做常量,该变量一旦初始化赋值之后,该值不能够再被修改; final修饰的基本类型是指变量的值不能够被修改; final修饰的对象类型是指变量的引用地址不能修改,但是变量的内容可以修改;★★★ final修饰的静态属性叫做静态常量,命名规则是全部大写,并用_分割,静态常量在声明时必须进行初始化; 代码[com.yuw.oop.finaldemo.*]: 参见包com.yuw.oop.finaldemo中的代码; * 2 abstract关键字 abstract关键字是抽象的; 可以修饰的对象: 类、方法; 关键字的特性: (1)abstract修饰的类叫抽象类;抽象类不能够被new;抽象类不能够通过new创建实例对象,因为抽象类含有抽象内容比如抽象方法,所以在new时是无法个抽象的部分分配内存的,所以不能new创建实例对象; (2)abstract修饰的方法叫抽象方法,抽象方法只有方法声明,没有方法体【普通方法的生命定义去掉{},加上abstract关键字】; (3)抽象方法因为没有方法体,需要由子类通过多态的方法来进行重写;如果子没有没有重写父类所有的抽象方法,则子类必须还是一个抽象类; (4)含有抽象方法的类一定是抽象类;抽象类不一定要含有抽象方法;抽象类中还可以包含其他非抽象方法; 语法: 抽象方法的语法: 访问控制修饰符 abstract 返回值类型 方法名(参数列表); 课堂问题: 抽象方法可以同时再使用 static 或者 final修饰么? 抽象类和抽象方法的应用场景: (1) 抽象类是对类的更高层次的抽象; (2)抽象类主要应用于在当前的需求层次上,还有不能去定的内容(例如,有些行为方法的内容无法定义),这时就可以使用抽象类来进行面向对象的设计; (3)抽象类一般将抽象方法推迟到子类中进行实现; 代码[com.yuw.oop.abstractdemo.*]: 参见包com.yuw.oop.abstractdemo中的代码; * 3 interface关键字 *接口的概念和语法* interface是接口关键字; 接口是一组抽象行为的集合体; 接口也是一种类; 语法: 访问控制修饰符 其他修饰符 interface 接口名 { 接口主体内容; } 解析: (1)接口是特殊的抽象类,定义时使用关键字 interface; (2)接口的命名规范:I+类命名规范,例如IRunnable; (3)接口也不能使用new创建实例对象; (4)接口中定义的变量都是公共静态常量,其中 public static final,可以全部或部分省略; 接口中没有属性,都是公共的静态常量。 (5)接口中定义方法都是公共的抽象方法,其中 public abstract,可以全部或部分省略; 接口中没有普通的行为方法,但是有一个新特性,可以使用default关键字定义普通行为方法; (6)接口可以实现多继承,主要是为了弥补类与类之间单继承的不足;【类是单继承】 (7)接口中定义常量和抽象方法都默认是public类型; (8)子类如果不能实现接口中所有的抽象方法,则该类还是一个抽象类; *接口的多继承:* 接口的多继承主要体现在一下两个方面: (1)类与接口之间的多继承 类可以多继承接口,继承的关键字是 implements ; 语法: ... 类名 implements 接口1,接口2,接口n{ } (2)接口与接口之间的多继承 接口与接口之间可以实现多继承,继承的关键字是 extends; 语法: ... 接口名 extends 接口1,接口2,接口n{ } 代码[com.yuw.oop.interfacedemo.*]: 参见包com.yuw.oop.interfacedemo中的代码; *软件工程OO原则:面向接口的编程* 面向接口的编程;【面向父类的编程】【多态应用】 *课堂作业*: 接口和抽象类的异同点; *接口的应用场景:* 接口是一组抽象方法的集合体,接口中定义的是一组行为方法; 反过来说, 当前类实现了某个接口就表示该类具有了某些行为能力; 如果只是抽象封装一组行为能力,则优先使用接口; 如果说在抽象封装一个类时,有部分行为方法无法实现,则使用抽象类; ### 1.3 设计模式 设计模式:就是在软件工程对特定问题进行特定的解决,这种解决方案有了通用的名字之后,就是设计模式; * 1 单件模式【单例模式】 单件模式【单例模式】: 一个类只有唯一的一个实例对象;【从任何地方访问都只能获取同一个唯一的实例对象】 商城的购物车就是单例模式的一种应用; 单例模式的实现机制: (1)创建一个单例模式类的静态属性;【保证常驻内存,任何时候都可以访问到】 (2)将构造方法私有化;【杜绝外部通过new的方式创建改单例模式类的实例对象】 (3)提供一个静态的获取该单例模式类实例对象的静态方法【通过类名调用静态方法】 注意: (1)单例模式中的线程安全问题; (2)掌握多种单例模式的实现方式。【懒汉模式、饿汉模式】 参考链接: http://cantellow.iteye.com/blog/838473 代码[com.yuw.oop.singletondemo.*]: 参见包com.yuw.oop.singletondemo中的代码; #### 参与贡献 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/)