java面向对象、关键字
文章目录
面向对象
1.面向对象概述
面向对象即OOP,面向对象编程。【数据一致化】
我对面向对象的理解是,用来描述一个现实中的事物,但是这个事物,无法具体描述。
例如:
【人】,我们如何确认这是一个人?
答:通过特征,最开始人的出现标志是直立行走,会使用工具,到后面拥有语言,穿着衣服。
通过以上特征确认这是一个人类。
通过以上这个例子,我将【面向对象】理解为对规律和特征的一种抽象,用来描述事物的特征,使面向对象的思想接近于人类对现实事物认知的思想方式
【类是对现实世界的抽象】
面向对象的作用
- 数据的载体
- 方法的载体
2.三大特征
2.1继承
子类继承父类
特征:
1.子类可以使用父类中非私有化成员(成员变量和成员方法)
2.子类无法获取父类中私有化的成员
3.实例化子类对象时会默认调用父类的无参构造方法
重载Reload
用于同一个类或同一个接口内
重载方法要求:
1.方法名一致
2.形参列表数据类型不同
3.返回值类型、权限修饰符无限制
重写Override
子类继承父类的方法,但父类的方法无法满足子类的场景需求,子类可以重写父类的方法。
1.方法声明,返回值类型,参数列表,方法名一致
2.子类的权限修饰符必须大于等于父类
3.重写必须有override注解
2.2封装
隐藏细节,对外提供接口
要求
1.全部成员变量都要使用private修饰
2.必须提供所有成员变量对应的getter和setter方法
3.必须梯控无参构造方法
2.3多态
同一个对象在不同时期的不同的状态或行为
经典理解:编译看左,运行看右
解释:
父类的数据引用类型变量,指向子类对象或者间接子类的对象
接口的引用数据类型变量,指向遵从接口的实现类对象接口中的成员变量,省缺属性public static final。仅提供数据展示
接口中的成员方法,省缺属性public abstract
默认成员方法,在jdk1.8以后语法支持,default修饰的默认方法,允许有方法体
- 一个类可以遵从多个接口,接口中有多个相同声明的方法,实现类只实现一次。
- 接口可以多级继承其他接口
总结
- 满足类型一致化要求,拓宽方法参数支持范围。同时支持数据类型一致化
- 拓宽方法返回值类型,可以支持类型统一
default关键字
- jdk1.8以上版本支持default关键字修饰默认方法
- 必须实现接口中的方法
- 接口中默认方法,实现类可以重写
3.关键字
3.1.abstract关键字
作用:
- 针对方法的约束和修饰,增强方法后期的自主性
- 后续的子类和实现类可以根据需求自由选择合适的方式完成代码实现,提升代码的复用性和特征性
- 在后期使用中可以降低方法冗余,提升开发效率,增强开发体验
语法特征:
abstract方法没有方法体,只有方法声明,要求子类或者实现类去完成方法体
abstract方法只能定义在abstract类和接口中
被继承时必须实现对应的abstract方法
abstract修饰的类无法实例化对象
3.2.final关键字
可以修饰类、成员变量、成员方法、局部变量、
3.2.1修饰成员变量
- final修饰的成员变量要求必须初始化
解决方案:
直接初始化赋值
有参构造方法实例化对象过程中,初始化final修饰的成员变量
final修饰的成员变量一旦赋值后无法二次修改
3.2.2修饰成员方法
- 被final修饰的成员方法不允许被重写
- 一般用于框架或者业务的核心业务代码。不允许修改 / 重写代码内容
3.2.3修饰局部变量
- final修饰的类只允许首次赋值,后期不允许二次赋值
3.2.4修饰类
- final修饰的类没有子类
- 基本类型不允许继承重新定义,例如:String类
注意:
final修饰引用数据类型变量,变量指向不可变,但指向的数据空间中的内容可变
3.3.static关键字
3.3.1类加载
- 程序所需资源的加载过程
三个重点
静态成员变量
静态成员方法
静态代码块
一个原则
类加载过程中,static修饰内容完成准备工作
3.3.2static修饰静态变量
static修饰的静态成员变量在整个代码运行周期中有且只有一个
static修饰的静态成员变量在内存的【数据区】
static修饰的静态成员变量在类加载阶段,准备就绪,已具备了数据提供能力和数据存储能力
3.3.3static修饰静态成员方法
常用于工具类封装
静态成员方法使用static修饰
静态成员方法不允许使用类内的非静态成员
静态成员方法内有非静态相关内容,无法执行(因为static修饰的静态成员方法在类文件加载阶段已具备执行能力)
static修饰的静态成员方法可以直接使用类内的其他静态资源
静态成员方法可以通过类名直接调用,摆脱类对象的限制,执行效率高
3.3.4static修饰静态代码块
一般用于程序初始化操作,预加载
静态代码块在类加载阶段一定执行,并且只执行一次
静态代码块可以调用类内其他静态资源
静态代码块不可以调用类内其他非静态资源