一、封装
1、概念
为提高代码安全性,将Java中部分代码“保护”起来,防止外部随意发访问,将这种操作的思想称之为封装。
2、如何封装
成员方法:按照用户的需求,将实现功能的方法代码统一封装到指定类的指定方法中,在外部用户只能调用,无法查看方法源码
成员字段:全部使用private作为访问权限修饰符,即全部私有化
3、简述封装思想的好处
- 简化代码编写
- 提高代码的安全性
- 降低类与类之间的耦合度(解耦合)------>关联性
4、JavaBean
(1)概念
①Bean:是框架语言的一个名词,表示Java类,即class
②JavaBean:按照指定规范,定义编写的Java类
(2)简述JavaBean定义规范
- 类的访问权限修饰符为public
- 类种必须明确定义公有的无参构造器
- 类中所有的成员字段(除常量以外)必须使用private作为访问权限修饰符
- 类种必须明确定义所有成员字段的公有的get/set方法
二、继承
1、概念
类与类之间存在大量的共性,当在再次定义这种类型的类是,还需要编写大量的重复代码;因此Java中将共性(共同的属性和方法)单独封装到指定的类种,称之为父类,而特性则定义在具体的类种,称之为字类,将父类和字类所具备的关系称之为继承关系。(注:Java中类与类之间的关系只有继承这一种关系)
2、简述继承思想的优缺点和特点
优点:
- 简化代码的编写(简化子类代码编写)
- 提高代码的复用性(重写性)
不足:一定程度上提高类与类之间的耦合度
特点:Java中只支持单继承操作,即只有一个直接父类
3、如何实现继承思想
public class 类名 extends 父类{
}
4、简述super关键字
表示父类对象,一定在方法体中应用,在字类中当调用父类中的父子类同名方法时,通过super关键字.调用父类,加以区分,当this和super关键字同时应用时,一定先写super
5、方法特征之一------>>>重写(Override)
(1)定义
父子类的共性方法,在父类中定义的操作不能满足子类的需求时,需要在子类中对该方法进行重新定义,称之为重写
(2)前提
- 类与类之间必须是继承关系
- 重写的方法一定是父类中已有的方法
- 子类重写后一定要对 方法进行功能增强
(3)简述Java中如何构成方法重写
方法名一致
&&
参数列表一致
&&
返回值类型一致或为父类方法返回值的子类
&&
访问权限修饰符不严于父类----->>>>>访问权限修饰符:子类>=父类
(4)对比方法重载与方法重写
比较项 | 方法重写(Override) | 方法重载(Overload) |
发生的位置 | 子类 | 本类 |
方法名 | 相同 | 与类名相同 |
参数列表 | 相同 | 不同(个数||类型||传递顺序) |
返回值 | 一致或是父类方法返回值的子类 | 无关 |
访问修饰符 | 一致或不严于父类 | 无关 |
5、类与类继承关系
- 一定能够继承:当访问权限修饰符为public、protected时
- 一定不能继承:当访问权限修饰符为private时
- 选择继承:在同包下,子类可以继承缺省作为访问权限修饰符的类成员
6、父类如何调用子类
- 父类不能调用子类的特有类成员
- 父类可以调用父子类同名成员方法
三、多态
1、什么是多态?
同一类的对象指向不同的引用
2、前提条件
类与类之间必须是继承的关系
3、使用多态编程思想的好处
- 简化业务代码的编写
- 提高代码复用性
- 节省栈内存空间
4、多态条件下,对象代表谁?指向谁?
- 对象代表谁看对象名前的类名
- 指向谁,看new关键字后调用的构造器
5、引用数据类型转换
(1)概念
当多态状态下,一般创建对象都是父类对象,而当需要调用子类的特有方法时,父类对象无法直接调用,因此需要将父类对象强制转换成子类,完成具体调用。
(2)分类
①自传:向下造型(向下塑形),创建父类对象指向子类构造器
父类 对象名=new 子类([参数列表]);
②强转:向上造型(向上塑形),将父类对象强制转换成子类对象
子类 对象名=(子类)父类对象;
Vehicle v1=new Vehicle();
Car car =new v1;
(3)简述面向对象思想?特征有哪些?使用面向对象思想便咸亨的好处?
①面向对象编程思想
实质上是将具有相同性质的一类事物归纳总结,按照指定的要求定义成类,通过指定的技术实例化该类的某一具体对象,通过对象调用该类的功能,实现用户需求。
②特征:封装、继承、多态、抽象
③使用面向对象思想编程的好处
- 简化代码编写
- 提高代码安全性
- 降低类与类之间的耦合度
- 提高代码的复用性
- 节省栈内存空间
(4)简述interface关键字、implements关键字、instanceof关键字、extends关键字
- interface关键字:定义接口的关键字
- implements关键字:实现接口的关键字
- extends关键字:继承类的关键字
- instanceof关键字:判断指定对象是否是指定类或子类对象的运算符,结果为布尔类型
public void upKeep(Vehicle v){
if(v.getKm()>=10000){
if(v instanceof Car){
System.out.println("需要更换轮胎!");
}else if(v instanceof Bus){
System.out.println("需要更换机油!");
}
}else {
System.out.println("无需进行保养!");
}
}
四、抽象(特殊应用)
Java中没有方法体的方法为抽象方法,定义抽象方法的类为抽象类。
1、如何实现抽象
- 修饰类和成员方法
- 修饰后的特点:不能实例化对象,既不能通过new关键字调用构造器
- 修饰方法:没有方法体
2、抽象类和抽象方法的定义格式
(1)抽象方法必须定义在抽象类中
(2)格式
public abstract class 类名{
成员字段
构造器
成员方法
public abstract 返回值类型 方法名([参数列表]); //抽象方法
}
3、接口
(1)使用接口的原因
- 抽象类会增加类与类之间的耦合度(抽象方法全部需要实现)
- 为了避免Java中单继承的局限性,提出多实现接口
实质:变相增强了类的能力
(2)定义格式
public interface 接口名 {
成员变量;(基本不用)
//抽象方法常用 ---abstract关键字可以省略不写
返回值 方法名([参数列表]);
//JDK8新特性
default 返回值 方法名([参数列表]){
方法体;
}
static 返回值 方法名([参数列表]){
方法体;
}
}
3、应用场景
(1)当需要定于成员字段、构造器、成员方法、抽象方法时,一定使用抽象类
(2)只需要定义统一的操作规则(即抽象方法),一定使用接口
4、对比普通类、抽象类、接口
比较项 | 普通类 | 抽象类 | 接口 |
定义的关键字 | class | abstract class | interface |
继承或实现的关键字 | extends | extends | implements |
成员字段 | 变量、常量 | 变量、常量 | 常量 |
构造器 | 既可以定义,也可以实例化 | 可以定义,不可以实例化 | 不可以定义,也不可以实例化 |
成员方法 | 普通方法 | 普通方法,抽象方法 | 抽象方法 |
5、拓展
(1)实际开发中:如果实现多个接口,多个接口之间使用逗号分割
(2)如果继承和实现接口同时应用,编写顺序为先继承,后实现
public class 类名 extends 父类 implements 接口1[,接口2,...]{
类成员定义;
}