一、封装
1.解决的问题
通常情况下可以在测试类给成员变量赋值一些合法但不合理的数值,无论是编译阶段还是运行阶段都不会报错或者给出提示,此时与现实生活不符,故此时就需要对成员变量进行密封包装处理,隐藏成员变量的细节以及保证成员变量数值的合理性
2.概念
对成员变量进行密封包装处理,来隐藏成员变量的细节以及保证成员变量数值的合理性,该机制就叫做封装
3.实现流程
1.私有化成员变量,使用private修饰
2.提供公有的get和set方法,并在方法体中进行合理值的判断
3.在构造方法中调用set方法进行合理值的判断
4.JavaBean
概念
是一种Java语音写成的可重用组件,其他Java类可以通过反射机制发现和操作这些JavaBean的属性
本质
类是公共的;有一个无参的公共的构造器;有属性,且有对应的get、set方法
二、继承
1.解决的问题
当多个类中有相同的特征和行为时,可以将相同的内容提取出来组成一个公共类,让多个类吸收公共类中已有的特征和行为,而在多个类型只需要编写自己独有特征和行为
2.概念
将相同的内容提取出来组成公共类,让多个类吸收公共类中的内容,而只需要编写自己都有特征和行为的机制,叫做继承
3.实现
Java语言中使用extends关键字来表示继承关系
例如:public class Worker extends Peison{} - 表示Worker类继承自Person类,其中Person类叫做超类、父类、基类,Worker类叫做派生类、子类、孩子类
4.特点
- 子类不能继承父类的构造方法和私有方法,但私有成员变量可以被继承,只是不能直接访问
- 任何方式式构造子类的对象时都会自动调用父类的无参构造方法来初始化父类中继承的成员变量,相当于在子类构造方法的第一行增加super()的效果
- Java语言中只支持单继承不支持多继承,一个子类只能有一个父类,但一个父类可以有多个子类。(父类的父类称做间接父类)
5.意义
使用继承提高了代码的复用性,可维护性及扩展性,是多态的前提条件
5.final关键字
概念
本意为“最终的、不可改变的”,可以修饰类、成员变量以及成员方法
使用方式
- 修饰类时体现在该类不能被继承,主要为了防止滥用继承
- 修饰成员方法时体现在该方法不能被重写但可以被继承,主要用于防止不经意间造成重写
- 修饰成员变量体现在该变量必须初始化且不能改变,主要用于防止不经意间造成改变
常量
开发中很少单独用final修饰成员变量,通常用public static final关键字共同修饰成员变量来表达常量的含义,常量的命名规格要求所有字母都要大写,不同单词之间采用下划线连接
三、多态
1.概念
主要指同一种事物表现出来的多种形态
2.语法格式
父类类型 引用变量名 = new 子类类型 ( 实际上就是用父类类型的引用指向子类类型的对象)
3.特点
- 父类类型的引用可以直接调用父类独有的方法
- 父类类型的引用不可以直接调用子类独有的方法
- 对于父子类都有的非静态方法来说,编译阶段调用父类版本,运行阶段调用子类重写的版本(动态绑定)
- 对于父子类都有的静态方法来说,编译和运行阶段都调用父类版本
4.意义
在于屏蔽不同子类的差异性,使用通用的编程带来不同的效果
5.使用场合
- 通过父类作为参数传递,而调用时实例化子类,从而形成多态
- 直接在方法体中使用抽象类的引用指向子类类型
- 通过返回值来构成多态,定义返回值为父类,而实际返回值为子类
6.回调模式
概念
如果一个方法的参数时接口类型,则在调用该方法时,需要创建并传递一个实现此接口类型的对象;
而该方法在运行时会调用到参数对象中所实现的方法
当接口 / 类类型的引用作为方法的形参时,实参的传递方式有两种
- 自定义类实现接口/继承类并重写方法,然后创建该类对象作为实参传递
- 使用匿名内部类的语法格式得到接口/类类型的引用即可