一.多态—-体现java的灵活性
1. 多态的概念—-面向对象编程的精髓
- 所谓多态:多种形态。生物学,是指一个生物或物种可以有多重不同的形式和阶段。OOP中,多态是指一个对象有多重形式的能力。相同的行为,不同的实现
2.多态的分类
1.静态多态
“静”在编译时期系统就能知道调用哪个方法。
实现:重载和重写
2.动态多态(重点)
运行中系统才能动态确定方法所指的对象。通过对象的绑定关系来确定。
1. 重写
2.动态绑定
概念:运行时根据父类引用变量指向的实际类型对象执行相应的子类方法,从而实现多态性
1. 转型技术
- 怎么转
- 向上转型技术,一个父类的引用变量可指向不同的子类对象,或者说一个子类对象可以被当做一个父类类型。
- instanceof关键字用于判断运行时对象的真正类型。
- 谁能转
只有有继承关系的,才可能做类型转换。
父类 变量 = 子类对象,向上转型没有风险
子类 变量 = (子类)父类对象 ,向下转型有风险。因为如果子类引用.子类中特有的方法,那么实际上的父类对象是没有这个方法的。
父类的范围比子类的范围大。
总结:要想编译通过且运行通过,只能靠本类引用指向本类对象,父类引用指向子类对象。子类引用不能指向父类的对象。 - 为什么能转
计算机的内存分配。 - 推演静态绑定
当我们得到一个父类的引用时,不知道实际上指向的是哪个对象。 - 运算符 instanceof
用于判断某个对象是否是某个类型的实例。 - 动态绑定机制
如果用父类引用指向子类对象,再用父类引用调用一个在子类中被重写的方法,那么调用的是子类的方法实现。因为JVM会在继承树上搜索,如果这个方法被子类重写了,那么调用子类的。
但是父类引用不能调用子类中特有的方法和属性。
3.多态的使用场景
1.多态参数
当方法的某个参数是一个引用的时候,该引用兼容的任何对象都可以传递给方法,从而允许方法接收不同数据类型的参数。
2.异构集合
创建一个不是同一类型,但是有共同父类的数据集合。不同对象的集合称为异构集合。基本数据类型没有父类,所以无法放入Object[]中的。但是基本数据类型有对应的包装类。
二.抽象
1.抽象类
- 什么是抽象类
有抽象方法的类就叫做抽象类。必须在类声明的前面加上可选修饰符abstract。 - 为什么要写抽象类
生成子类。 - 抽象类到底在语法上有什么特点
- 不能够实例化。因为对象是实际的存在,不应该有不确定的东西。
- 虽然抽象类不一定有抽象方法,但是一般上不这样设计。
- 继承了抽象方法的话,必须强制要求重写父类的抽象方法。除非这个子类也是一个抽象类。
- 只能设计在类和方法上面。
- 和普通类有什么关系
抽象类的内容和普通类是完全相同的。属性、构造、方法、初始化块。
2.抽象方法
当一个方法我们只能确定它的声明,无法确定它的实现,该方法就要设计为抽象方法。
语法:在方法的声明部分加上一个可选修饰符abstract,该方法不能有方法的实现部分,连{ }也不能有,用“;”直接结束。
public abstract void function();
2.接口
1.为什么要使用接口
让没有继承关系的类也可以共享行为,解决单继承丰富度不够的问题。
因为没有继承关系的类,也可能有相同的行为。仅凭类与类之间的is-a关系,不能描述所有的场景。
2.语法
- 定义一个接口 interface
- 命名:XXXable,XXX是某种行为,able是能够,代表接口能够做某种行为的能力。
public interface Serviceable{
}
- 接口在语法上访问修饰符只能是public或者默认。
- 公共接口的名字必须和它所在的文件名保持一致。
- 实现接口
public class XXX implements XXX接口{
}
必须实现接口中的所有方法,除非这个类是一个抽象类。
3. 继承接口 extends
接口继承接口是允许多继承的。接口相对于接口要复杂一些。
3.接口在设计上什么时候用
接口的引用指向实现了这个接口类的对象。但是只能看到实现类身上来自接口的东西。参与动态多态。
4.特点
- 是一种独立的数据类型。
- 关注行为的共享。
- 一个类可以同时实现多个接口。在implements关键字后面书写多个关键字的名字,中间用逗号分隔。
- 类在实现接口的同时,可以做继承。
- 父类如果实现了接口,那么子类中也有接口中的方法。
5.组成
- 公共静态常量,就算我们不写public、static、final、天生就是公共静态常量。
- 没有构造器。
- 接口里面的方法只能是公共抽象方法。就算不写public、abstract、默认也是抽象方法。高版本jdk中也可以有实现了的方法。但是要使用default关键字进行修饰。
- 接口不能有初始化块。
抽象父类和接口选择:把与生俱来的行为写到抽象类中去,把可以附加的行为写到接口中去。
接口的设计原则:最小接口原则,尽量设计小接口,少设计大接口。因为最小接口原则可以自由组合。不会出现接口污染的问题(因为要实现接口中的一个功能,但是不得不实现接口中其他不需要的方法)。