《java编程思想系列6》 接口

来源:互联网 发布:王者荣耀 嬴政 知乎 编辑:程序博客网 时间:2024/05/29 03:04
一、抽象类和抽象方法

抽象方法:仅有声明而没有方法体

abstract void f();

包含抽象方法的类叫做抽象类。如果一个类包含一个或者多个抽象方法,该类必须被限定为抽象的。(否则编译器就会报错)

如果从一个抽象类继承,并想创建该新类的对象,那么久必须为基类中的所有的抽象方法提供方法定义。如果不这么做,那么导出类便也是抽象类,且编译器将会强制我们用abstract关键字来限定这个类

我们也可能创建一个没有任何抽象方法的抽象类:
考虑这样一种情况,我们有一个类,让其包含任何abstract方法都显得没有实际意义,但是我们也想要阻止产生这个类的任何对象。

二、接口

interface关键字产生一个完全抽象的类,它根本没有提供任何具体的实现。它允许创建者确定方法名、参数列表和返回类型,但是没有任何方法体。接口只提供了形式,而未提供任何具体实现。

要想创建一个接口,需要用interface关键字来替代class关键字。就像类一样,可以在interface关键字前面添加public关键字,如果不添加public关键字,则它只具有包访问权限,这样它就只能在同一个包内使用。

接口也可以包含域,但是这些域隐式的是static和final的。

可以选择在接口汇总显式的将方法声明为public的,但是即使不这么做,它们也是public的。因此,当要实现一个接口的时候,在接口中被定义的方法必须定义为public的,否则,它们就只有默认的包访问权限,这样在方法被继承的时候,其可访问权限就降低了,这是java编译器所不允许的。


三、完全解耦

适配器设计模式

四、java中的多重继承

在c++中,组合多个类的接口的行为被称作多重继承。它可能会使你背负沉重的包袱,因为每个类都有一个具体实现。在java中,你可以执行相同的行为,但是只有一个类可以有具体实现,因此通过组合多个接口,c++的问题是不会再java中发生的。

当将一个具体类和多个接口组合在一起的时候,这个具体类必须放在前面,后面跟着的才是接口(否则编译器会报错)

使用接口的核心原因:
1)为了能够向上转型为多个基类型(以及由此而带来的灵活性)
2)与抽象类相同:防止客户端程序员创建该类的对象,并确保这仅仅是建立一个接口。

我们应该使用抽象类还是使用接口?
如果要创建不带任何方法定义和成员变量的基类,那么久应该选择接口而不是抽象类。事实上,如果知道某事物应该成为一个基类,那么第一选择就应该是使它成为一个接口

五、通过继承来扩展接口

接口继承:
1)在接口中添加新的方法声明
2)通过继承在新接口中组合数个接口

一般情况下,只可以将extends用于单一类,但是可以引用多个基类接口:

1、组合接口时候的名字冲突
六、适配接口

适配器模式:Scanner类

七、接口中的域

1)因为你放入接口中的任何域都自动是static和final的,所以接口就成为了一种很便捷的用来创建常量组的工具。在java SE5之前,这是产生于c或者c++enum具有相同效果的类型的唯一途径

2)在接口中定义的域不能是“空final”的,但是可以被非常量表达式初始化。
当然,这些域不是接口的一部分,它们的值被存储在该接口的静态存储区域内。

八、嵌套接口

九、接口与工厂

工厂设计模式:
0 0
原创粉丝点击