接口(纯的抽象类,只提供设计不提供实现)
一、规则
1.接口中可以规定方法原型:方法名、参数列表以及返回类型,不可以规定方法体。接口的方法默认为抽象方法,可以省略public及abstract关键字
2.接口中可以包含基本数据类型的数据成员,但它们默认为static和final。接口的数据成员一定要有初值,且此值不能再被修改,可以省略final及static关键字
二、接口的作用
1.继承多个设计
2.建立类与类之间的“协议”:将类根据其实现的功能分组用接口表示,而不必顾虑它所在的类继承的层次;最大限度地利用动态绑定,隐藏实现细节
3.在不同类之间实现常量的共享
三、接口声明语法
[接口修饰符:final abstract,可省略] interface 接口名称[extends 父接口名]
{
方法原型或静态常量
}
四、实现接口语法
[public] class 类名称 implements 接口名称
{
实现接口的方法;
本类声明的更多变量和方法;
}
必须实现接口中的所有方法且来自接口的方法必须声明成public
五、实现多个接口的语法(java中类只支持单继承,但通过接口可以实现对设计的多重继承)
[public] class 类名称implement 接口1,接口2,…
{
…
}
六、接口的扩展(接口与接口的继承关系,可以多继承)
1.实现一个接口的类也必须实现其超接口
2.接口扩展的声明语法:
Interface 子接口名称 extends 超接口名称1,超接口名称2,…
{
…
}
类型转换
一、概念
1.转换方式:隐式转换、显示转换
2.转换方向:向上转型、向下转型
二、类型转换规则
1.基本类型的转换:将值从一种类型转换成另一类型
2.引用变量的类型转换:将引用转换为另一类型的引用,并不改变对象本身的类型
3.引用变量只能被转为:
(1)任何一个(直接或间接)超类的类型(向上转型)
(2)对象所属类(或其超类)实现的一个接口类型(向上转型)
(3)被转为引用指向的对象的类型 PS:当某个接口类型的引用指向实现接口类的对象或超类类型的引用指向一个子类的对象(向下转型)时
4.一个引用被转换为超类或接口的引用后,通过它能够访问的只有在超类或接口中声明过的方法
三、隐式转换
1.基本数据类型:可以转换的类型之间,存储容量低的自动向存储容量高的类型转换
2.引用变量:(1)转换为超类型引用或(2)转换为对象所属类实现的接口类型
四、显示转换
1.强制转换:(T)表达式,T为要强制转换的类型
2.引用变量:(3)被转为引用指向的对象的类型
五、类型转换主要应用场合
1.赋值转换:赋值运算符右边表达式或对象类型转换为左边的类型
2.方法调用转换:实参类型转换为形参类型
3.算术表达式转换:算数混合运算时,不同的操作数转换为相同的类型再进行计算
类型在表达式中的自动提升:表达式中有double,全部提升为double。否则如果有 float,全部提升为float。否则如果有 long.....
4.字符串转换:字符串连接运算时,如果一个操作数为字符串,另一个操作数为其他类型,则会自动将其它类型转换为字符串
方法的查找
一、实例方法查找
根据引用指向的对象的类开始,沿类层次向上查
![](https://i-blog.csdnimg.cn/blog_migrate/58190001bc60ad8495041e99207b6c7a.jpeg)
二、类方法的查找
在引用变量声明所属的类中查找
![](https://i-blog.csdnimg.cn/blog_migrate/55ffaaefe58461af08774b043f2eb128.jpeg)
多态
一、多态的概念
1.超类对象和从相同超类派生出来的多个子类的对象,可被当作同一类型对象对待
2.实现同一接口的不同对象,可被当作同一类型对象对待
3.可向这些不同类对象发送同样的消息,由于多态性,这些不同类的对象响应同一消息时的行为可以有所差别,例如:所有的Object类的对象(超类对象和派生出多个子类对象)可以相应toString()
二、绑定:方法调用表达式与方法体的代码结合起来的过程
1.早绑定:程序运行之前执行绑定
2.晚绑定:也成为动态绑定或运行期绑定。是基于对象的类别,在程序运行时执行绑定。多态性的技术基础为动态绑定
构造子类对象时构造方法的调用顺序
首先调用超类构造方法,按类层次向下逐步调用。首先执行最远超类object类的构造方法