导图社区 类与对象、面向对象、封装继承知识点学习框架
类与对象、面向对象、封装继承知识点学习框架、将多个构造函数中相同的操作提取到构造代码块中,因为每个构造函数执行,都会先调用构造代码块。
编辑于2022-11-17 09:30:25 广东类与对象、面向对象、封装继承知识点学习框架
面向对象
概述
它是基于面向过程而言的,它是一种程序编写的思想
面向对象思想的特点
更符合人们的思考方式
将复杂的事情简单化
由执行者 转变为 指挥者
举例
做菜
买电脑
旅游
类与对象
事物
现实生活中存在的东西,叫事物
属性
外在的特征
姓名。年龄,性别
行为
能做什么事情
吃饭、睡觉、学习
类
概念
属性和行为的集合
成员变量(属性)
成员方法(行为)
格式:
class 类名{.....}
对象
概念
类的具体体现
格式
类名 对象名 = new 类名();
调用对象中的成员
对象名.成员变量
对象名.成员方法()
案例
学生
手机
汽车
老师
成员变量与局部变量的区别
代码位置
成员变量
类中方法外
局部变量
方法内
内存位置
成员变量
堆内存
局部变量
栈内存
默认值
成员变量
有
局部变量
没有
成员的创建与销毁时间
成员变量
随着对象的创建而存在,随着对象的消失而消失
局部变量
随着方法的调用而存在,随着方法调用完毕而消失
使用范围
成员变量
在整个类中都可以访问
局部变量
只能在当前方法中访问
匿名对象
概念
没有名字的对象
什么时候使用匿名对象
对象中的方法只调用一次的时候 使用
作为 调用方法时的实际参数使用
变量的使用原则
就近原则
如果在方法中找到,使用局部变量
如果在类中方法外找打,使用成员变量
如果在类中没有找到, 报错
封装
概念
隐藏对象的属性与实现细节,对外提供公共访问方式
封装的体现
类
方法
private
包
对外提供公共访问方式
setXxx()
getXxx()
构造函数
作用:
当创建对象时会调用构造函数,可以为对象中的成员进行初始化
格式
修饰符 类名(参数列表){ 。。。 }
特点
构造函数名与类名相同
没有返回值
没有返回值类型
this关键字
概念:
业余版: 当前对象的引用
专业版: 当前方法所属对象的引用
情况使用
构造函数
局部变量与成员变量名字同名,使用this关键字来区分
格式:
this.成员变量
this.成员方法
代码块
局部代码块
位置:方法内
作用:控制变量使用范围
构造代码块
位置:类中方法外
作用:
将多个构造函数中相同的操作提取到构造代码块中,因为每个构造函数执行,都会先调用构造代码块
静态代码块
位置:主要使用在类中方法外
作用:
用来加载驱动,因为驱动只需加载一次
特点:
只能执行一次
执行顺序
静态代码块--构造代码块--构造函数
继承
概念:
在一个已有类的基础上,添加一些新的数据,得到一个新的类
继承的特点
子类可以直接访问父类中非私有的属性与方法
java中只支持单继承,不支持多继承
java中支持多层(重)继承
成员的特点
成员变量
变量的就近使用原则
| 成员变量与局部变量重名,使用 this 关键字
| 子父类成员重名, 使用 super 关键字
this: 当前对象的引用
super: 父类的引用
成员方法
方法的重写
概念: 子类将父类的方法重新实现
注意事项:
子类方法的访问权限 要大于等于 父类方法访问权限
静态方法 只能覆盖 静态方法
子类不能覆盖父类私有方法
构造函数
| A: 每一个构造函数都会默认访问父类空参构造函数 super();
| B: 每一个构造函数的第一行默认就是 super();
| C: 先执行父类的构造函数,再执行自己的
| D: 如果父类没有空参数构造函数,子类必须使用 super(参数列表) 访问父类其他构造函数
| E: 如果父类没有空参数构造函数,子类可以访问 本类其他构造函数 this(参数列表),之后再访问父类的构造函数
| F: super(参数列表) 与 this(参数列表) 都要在构造函数的第一行,那么, super(参数列表) 与 this(参数列表) 不能同时存在
多态
概念: 一种物质存在多种形态
水果、 女生、 蔬菜、 动物 、 水
使用的前提条件
A: 需要继承或者实现关系
B: 子类要重写父类的方法
C: 父类引用 指向 子类对象
多态中的成员特点
成员变量
| 编译: 看左边父类
| 运行: 看左边父类
成员方法
| 编译: 看左边父类
| 运行: 看右边子类
静态成员方法
| 编译: 看左边父类
| 运行: 看左边父类
多态的好处和作用
| 好处: 提高了程序的扩展性
后期的维护性(父类来完成的)
| 弊端: 不能使用子类特有方法
多态的案例(向上转型、向下转型)
向上转型:
理解:子类 转换成 父类 (自动转换)
作用: 提高了程序的扩展性
向下转型:
理解:父类 转换成 子类 (强制转换)
作用: 使用子类特有的方法
抽象类
抽象:
不具体的,模糊的东西
抽象方法:
只有方法的声明,没有方法体,那么,这个方法就是抽象方法
抽象类:
使用 abstract 关键字修饰的类 就是抽象类
包含抽象方法的类 一定是抽象类
抽象类的特点
| A: 抽象方法与抽象类 必须要使用 abstract 来修饰
| B: 抽象类不可以创建对象
| C: 抽象方法的格式
修饰符 abstract 数据类型 方法名(参数列表);
| D: 抽象类 可以没有抽象方法
| E: 继承抽象类的子类,要么为抽象类, 要么重写父类中所有的抽象方法
抽象类中的成员
成员变量
| 普通变量
| 常量 final
成员方法
| 普通方法
| 抽象方法
构造函数
| 有构造函数
| 作用: 子类创建对象,调用父类构造函数,为父类成员进行初始化操作
抽象类相关问题
不能与哪些关键字 共存
final : final修饰的方法是最终的, 不能被子类重写
| private : private修饰的方法为私有的, 子类不能重写
| static :static修饰的方法 可以被类名.方法名 直接调用, 二者共存的话,调用抽象方法没有意义
抽象类举例代码
老师
学员
员工
接口
概述
一个特殊的抽象类(但不是类,因为不会继承Object)
定义接口: interface
实现接口: implements
接口的思想特点
| 提高了程序的扩展性
| 降低了程序的耦合性
接口的特点
成员特点
构造函数: 没有
成员方法: 只有抽象方法
成员变量: 只有 final 修饰的常量, final 修饰的常量 在 常量池中
继承一个类的同时,可以实现多个接口
类与接口的关系
| 类与类之间的关系
继承关系,单继承,多层(重)继承
| 类与接口之间的关系
实现关系,单实现也可以多实现
| 接口与接口之间的关系
继承关系,单继承也可以多继承
接口与抽象类的区别
接口:
构造函数: 没有
成员方法: 只有抽象方法
成员变量: 只有 final 修饰的常量, final 修饰的常量 在 常量池中
抽象类:
构造函数: 有
成员方法: 普通方法与抽象方法
成员变量: 普通变量与常量
接口与类是实现关系: 多实现
抽象类与类是继承关系:单继承
什么时候使用接口? 什么时候使用抽象类?
抽象类: 所有的子类都必须要完成的操作,使用抽象类
吃饭、睡觉
接口:部分子类必须要完成的操作, 接口
说英语、买车、娶媳妇
运动员案例
内部类
概念
在一个类中,定义了一个类
访问的特点:
A: 内部类可以访问外部类的成员,包含私有成员
B: 外部类想要访问内部类的成员,必须要创建内部类对象,才可以访问
根据位置不同
| 成员位置: 成员内部类
| 局部位置; 局部内部类
成员内部类
格式
访问内部类的两种方式
A: 外部类.内部类 对象名 = new 外部类().new 内部类();
B: 在外部类中定义了一个访问内部类的方法,然后外部类对象,调用该方法(推荐)
成员内部类的修饰符
| private: 提高数据的安全性
| static: 调用方便
局部内部类
特点:
A: 局部内部类可以直接访问外部类的成员
B: 局部内部类,如果要访问外部类的局部变量,这个局部变量要加 final
匿名内部类
概念: 没有名字的内部类
其实,匿名内部类就是一个继承外部类(这个外部类不是Outer) 或者 实现接口的子类对象
格式:
new 外部类名或者接口名(){ 重写抽象方法 也可以定义特有方法 };
修饰符
static
特点
多个对象共享同一个属性,使用静态
| 被静态修饰的方法,直接类名调用,方便,不用创建对象
static静态在生活中的案例
空调 静态修饰
老师 静态修饰
笔记本电脑 非静态修饰
静态成员与普通成员的区别
| 创建时间与销毁消失
静态成员: 随着类的加载而存在,随着类的消失而消失
普通成员: 随着对象的创建而存在,随着对象的消失而消失
| 调用上的区别
静态成员: 对象.成员 类名.成员
普通成员: 对象.成员
| 位置上的区别
静态成员: 方法区
普通成员: 堆内存
| 理解上的区别
静态成员: 多个对象共享同一个属性
普通成员: 每一个对象单独所拥有的
数组操作工具类
@author 作者
@version 版本
@param arr 参数
@return 返回值
帮助文档的制作
javadoc -d 相对目录 -author -version ArrayTools.java
Math工具类
| 查找API
| API(帮助文档) Application Programming Interface
Final关键字
概念: 最终的意思
可以修饰 类、方法、变量
final 修饰的类, 不能被子类继承
final 修饰的方法, 不能被子类重写
final 修饰的变量,值不能改变,相当于一个常量
包的概述与使用
包就是文件夹
好处:
将class文件分类管理
package 必须写在程序文件的第一行。
类名的全称的是 包名.类名
编译java文件的时候 自动创建包
javac -d 目录 java文件名
权限访问修饰符
访问权限修饰符
public 公共的
protected 受保护的
(在JDK1.8 default)默认的
private 私有的
与包之间的访问情况
修饰符: public protected 默认的 private
在当前类中: Y Y Y Y
在相同包中: Y Y Y
在不同包中的子类: Y Y
在不同包中的无关类: Y
import关键字的概述与使用
作用: 导入包中的类
格式: import 包名.类名;
注意:在一个类中 可以多次 import, 但是 package 只能有一个
代码书写顺序:
package -- import -- class