一、接口
1、概念
- 可以看做是一个“纯”抽象类,它只提供一种形式,并不提供实现
- 接口中可以规定方法的原型:方法名、参数列表以及返回类型,但不规定方法主体
- 也可以包含基本数据类型的数据成员,但他们都默认为static和final。
2、接口的作用
- 是面向对象的一个重要机制
- 继承多个设计
- 建立类和类之间的“协议”
- 将类根据其实现的功能分组用接口代表,而不必顾虑它所在的类继承层次;这样可以最大限度的利用动态绑定,隐藏实现细节;
- 实现不同类之间的常量共享。
接口允许我们在看起来不相干的对象之间定义共同行为
3、接口的语法
-
声明格式为
[接口修饰符] interface接口名称[extends 父接口名]{...//方法的原型声明或静态常量
}
-
接口的数据成员一定要有初值,且此值将不能再更改,可以省略final关键字。
接口中的方法必须是“抽象方法”,不能有方法体,可以省略public及abstract关键字。
4、接口实现
- 不能用new运算符直接产生接口对象;
- 利用接口设计类的过程,称为接口的实现,使用implements关键字,语法如下:
public class 类名称 implements 接口名称{
// 在类体中实现接口的方法
// 本类声明的更多变量和方法
}
注意:
- 必须实现接口中的所有方法;
- 来自接口的方法必须声明成public;
5、实现多个接口的语法
- Java不允许一个类有多个超类
- 一个类可以实现多个接口,迪过这种机制可实现对设计的多重继承。
- 实现多个接口的语法如下:
[类修饰符] class 类名称 implements 接口1,接口2,...
{
... ...
}
6、接口的扩展
- 接口可通过扩展的技术派生出新的接口。
- 原来的接口称为超接口(super interface);。
- 派生出的接口称为子接口(sub interface)。
- 实现一个接口的类也必须实现其超接口
- 接口扩展的语法:
interface 子接口的名称 extends 超口的名称1,超接口的名称2,...
{
... ...
}
- Shape是超接口,Shape2D与Shape3D是其子接口。Circle类及Rectangle类实现接口Shape2D,而Box类及Sphere类实现接口Shape3D。
二、类型转换
类型转换又称为塑型(type-casting)。
1. 分类
-
转换方式
- 隐式的类型转换
- 基本数据类型
-
可以转换的类型之间,存储容量低的自动向存储容量高的类型转换。
-
引用变量
被转成更一般的类,例如:Employee emp; emp = new Manager(); //将Manager类型的对象直接赋给 //Employee类的引用变量,系统会 //自动将Manage对象塑型为Employee类 -
被塑型为对象所属类实现的接口类型,例如:
Car jetta = new Car(); Insurable item = jetta;
-
- 基本数据类型
- 显式的类型转换
-
基本数据类型
(int)871.34354; //结果为871 (char)65; //结果为‘A' (long)453; //结果为453L -
引用变量
Employee emp; Manager man; emp = new Manager(); man = (Manager)emp; //将emp显式转换为它指向的对象的类型
-
- 隐式的类型转换
-
转换方向
- 向上转型
- 将子类对象的引用转化为父类对象的引用
向上转型不用强制转换
- 将子类对象的引用转化为父类对象的引用
- 向下转型
- 将父类对象的引用转化为子类对象的引用
向下转型要强制转换
- 将父类对象的引用转化为子类对象的引用
- 向上转型
2. 类型转换规则
- 基本类型之间的转换
- 将值从一种类型转换成另一种类型。
- 引用变量的类型转换
- 将引用转换为另一类型的引用,并不改变对象本身的类型。
- 只能被转为:
- 任何一个(直接或间接)超类的类型(向上转型)﹔
- 对象所属的类(或其超类)实现的一个接口(向上转型)﹔·
- 被转为引用指向的对象的类型(唯一可以向下转型的情况)。
- 当一个引用被转为其超类引用后,通过他能够访问的只有在超类中声明过的方法。
3. 型转换举例
- Manager对象
- 可以被塑型为Employee、Person、Object或Insurable,。
- 不能被塑型为Customer、Company或Car
4.类型转换的主要应用场合
- 赋值转换
- 方法调用转换
- 算术表达式转换
- 字符串转换
- 赋值转换
- 赋值运算符右边的表达式或对象类型转换为左边的类型;
- 方法调用转换
- 实参的类型转换为形参的类型;
- 算术表达式转换
- 算数混合运算时,不同类型的操作数转换为相同的类型再进行运算;
- 字符串转换
- 字符串连接运算时,如果一个操作数为字符串,另一个操作数为其他类型,则会自动将其他类型转换为字符串。