JAVA中的接口和类型转换

396 阅读4分钟

一、接口

1、概念

  •   可以看做是一个“纯”抽象类,它只提供一种形式,并不提供实现
  •  接口中可以规定方法的原型:方法名、参数列表以及返回类型,但不规定方法主体
  • 也可以包含基本数据类型的数据成员,但他们都默认为static和final。

2、接口的作用

  •  是面向对象的一个重要机制
  • 继承多个设计
  • 建立类和类之间的“协议”
    • 将类根据其实现的功能分组用接口代表,而不必顾虑它所在的类继承层次;这样可以最大限度的利用动态绑定,隐藏实现细节;
    • 实现不同类之间的常量共享。

接口允许我们在看起来不相干的对象之间定义共同行为
image.png

3、接口的语法

  •   声明格式为
    [接口修饰符] interface接口名称[extends 父接口名]{

    ...//方法的原型声明或静态常量

    }

  • 接口的数据成员一定要有初值,且此值将不能再更改,可以省略final关键字。

接口中的方法必须是“抽象方法”,不能有方法体,可以省略public及abstract关键字。

4、接口实现

  • 不能用new运算符直接产生接口对象;
  • 利用接口设计类的过程,称为接口的实现,使用implements关键字,语法如下:
public class 类名称 implements 接口名称{

       // 在类体中实现接口的方法
       // 本类声明的更多变量和方法

}

注意:

  1. 必须实现接口中的所有方法;
  2. 来自接口的方法必须声明成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。

image.png

二、类型转换

类型转换又称为塑型(type-casting)。

1.     分类

  1. 转换方式

    • 隐式的类型转换
      • 基本数据类型
        1. 可以转换的类型之间,存储容量低的自动向存储容量高的类型转换。

        2. 引用变量
          被转成更一般的类,例如:

          Employee emp;
          emp = new Manager();      //将Manager类型的对象直接赋给
                                  //Employee类的引用变量,系统会
                                  //自动将Manage对象塑型为Employee类
          
        3. 被塑型为对象所属类实现的接口类型,例如:

          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. 转换方向

    • 向上转型
      • 子类对象的引用转化为父类对象的引用
        向上转型不用强制转换
    • 向下转型
      • 将父类对象的引用转化为子类对象的引用
        向下转型要强制转换

2. 类型转换规则

  • 基本类型之间的转换
    • 将值从一种类型转换成另一种类型。
  • 引用变量的类型转换
    • 将引用转换为另一类型的引用,并不改变对象本身的类型。
    • 只能被转为:
      • 任何一个(直接或间接)超类的类型(向上转型)﹔
      • 对象所属的类(或其超类)实现的一个接口(向上转型)﹔·
      • 被转为引用指向的对象的类型(唯一可以向下转型的情况)。
    • 当一个引用被转为其超类引用后,通过他能够访问的只有在超类中声明过的方法。

3. 型转换举例

  • Manager对象
    • 可以被塑型为Employee、Person、Object或Insurable,。
    • 不能被塑型为Customer、Company或Car
      image.png

4.类型转换的主要应用场合

  • 赋值转换
  • 方法调用转换
  • 算术表达式转换
  • 字符串转换
  • 赋值转换
    • 赋值运算符右边的表达式或对象类型转换为左边的类型;
  • 方法调用转换
    • 实参的类型转换为形参的类型;
  • 算术表达式转换
    • 算数混合运算时,不同类型的操作数转换为相同的类型再进行运算;
  • 字符串转换
    • 字符串连接运算时,如果一个操作数为字符串,另一个操作数为其他类型,则会自动将其他类型转换为字符串。