前面提到, Java 语言可以实现类的继承(对应关键字 extends ),但只能实现单继承,也即不能同时继承多个类;如果我们刚好有这样的需求怎么办? 这时候需要用到另外一个技术特性了,接口( interface )


接口的结构和抽象类非常相似,也具有数据成员与抽象方法,但与抽象类又有以下两点不同: 1 、 接口里的数据成员必须初始化,且数据成员需要初始化为常量

2 、 接口里的方法必须全部声明为 abstract ,也即接口中,不能有普通方法,而必须全部是 “ 抽象方法 ”

因为没有普通方法,具体在声明时, abstract 关键字可以省略

接口的抽象方法,需要由具体的类去实现,换种说法,每一个由接口实现的类,必须在类内部复写( override )接口中的抽象方法,且可自由地使用接口中的常量

由于接口里面有抽象方法,和抽象类一样的是,它不能实例化,也即不能直接创建对象

接口和抽象类的主要区别: 接口是 java 实现多继承的一种机制,如果需要一个类去继承( extends )多个抽象方法的话,在 Java 语言中无法实现,所以就出现了接口的概念

一个类只可以继承一个父类(超类),但却可以实现( implement )多个接口

例如,我们定义了一个 Person 接口,包括 name 、 age 、 occupation 共 3 个数据成员,加上 talk 抽象方法,现在需要定义 Engineer 类来实现这个接口,并继承其中的 talk 方法

UML 模型如图所示,其中 Person 接口只显示了抽象方法

图 1 Person 接口及其实现类 Engineer 的 UML 模型图 具体程序如下: interface Person { String name = ” 风一 ” ; // 初始化数据成员 int age = 26; String occupation = ” 工程师 ” ; 声明抽象方法 talk() public abstract String talk(); } // Engineer 类继承自 Person 类 class Engineer implements Person { // 复写 talk() 方法 public String talk() { return ” 姓名: ” + this . name + ” ,年龄: ” + this . age + ” ,职业: ” + this . occupation ; } } 然后执行下面的两行代码调用,大家可以考虑下,输出结果是什么

Engineer engerFengyi = new Engineer(); System. out .println(engerFengyi.talk()); 补充说明,接口之间也可以派生,继承抽象方法,不过与类的单继承不同的是,一个接口可以同时继承多个接口,也就是同时继承了多个接口的抽象方法与常量

通常情况下,我们用得较多的还是通过具体的类来实现某些接口,例如一些 UI 组件的点击、触摸事件监听、数据处理完成之后的回调操作等

微价值网(公号 vjiazhi ),专注移动互联网、 App 推广、盈利以及 Android/iOS 等技术基础培训




欢迎投稿 职场/创业方向. 邮箱wangfzcom(AT)163.com:王夫子社区 » Java语言中的接口【Android编程基础第15篇】pdf,txt教程

    标签:

点评 0

评论前必须登录!

登陆 注册