您的位置 首页 java

《JAVA编程思想》5分钟速成:第9章(接口)

第9章 接口

前言:

1、 抽象类 (abstract class)和接口(interface)有什么异同?

2、抽象的(abstract)方法是否可同时是静态的( static ),是否可同时是本地方法(native),是否可同时被synchronized修饰?

3、接口是否可继承(extends)接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承具体类(concrete class)?


9.1 C++的抽象设计 :

在C++中,只有抽象类的概念(没有abstract关键字),没有接口的说法。

虚函数:

C++通过virtual关键字将类内方法声明为虚函数(如virtual void f();)来实现多态(在C++中,派生类只能重写父类的虚函数,而在 JAVA 中,除static方法外,其它方法都是可以被重写的,即默认都是多态的)。除此以外,包含虚函数的类与其它类没有区别。

纯虚函数:

对虚函数如virtual void f() = 0;声明时,构成纯虚函数。因为纯虚函数没有函数体,不是完整的函数,无法调用,也无法为其分配内存空间,无法实例化,也就无法创建对象,所以在C++中含有纯虚函数的类被称为抽象类(Abstract Class,注意在C++中,没有abstract关键字)。抽象类通常作为基类(叫做抽象基类),让派生类去实现纯虚函数。派生类必须实现纯虚函数才能被实例化。

9.2 Java的抽象设计 :

在Java中,有abstract 和 interface 关键字,通过它们来定义抽象类和接口;

9.2.1 Java的抽象类&抽象方法(abstract关键字) :

抽象类不能实例化,即不能通过new生成对象,但注意可以追加{}生成匿名实现类,仍然不是它自己的实例化。

抽象类可以有构造函数,但不能直接调用,通常由实现类构造函数调用。

抽象类的方法前添加abstract关键字,定义抽象方法,相当于C++的纯虚函数,派生类必须重写该方法,然后才能实例化。Java类中如有抽象方法,则类符号前必须也要添加abstract关键字,定义为抽象类(可以没有抽象方法)。

抽象类中可以没有抽象方法,即可以全部是含方法体的非抽象方法。

9.2.2 Java的接口 (interface关键字):

抽象类进一步抽象,即所有方法都没有具体实现,只声明了方法的形式(同C++头文件中函数的声明格式),并且把class关键字改成interface关键字,这就创建了一个接口。

接口可以包含域,且隐式地是static 和 final的,显然,接口中的域不能是空final,这些域不是接口的一部分,它们存储在该 接口的静态存储区域内。

接口关键字interface前可以添加public修饰符,不加默认是包访问权限,接口的方法默认都是public的。

9.3 Java的多重继承实现:

因为Java接口没有任何具体实现,即没有任何与接口相关的存储,因此可以定义一个Java类来implements多个接口,达到C++中多重继承的效果。

Java可以定义一个接口去extends另外的一个或多个接口来实现接口的扩展。

因为Java接口中的域自动是final和static的,所以接口就成了一种便捷的创建常量组的工具。在Java SE5之前,用这种方式来产生 enum 的效果。Java SE5之后,Java有了enum关键字,因此使用接口来群组常量就没意义了。

9.4 Java的接口多层嵌套:

Java允许多层接口嵌套。

9.5 接口与工厂方法:

生成遵循接口规范的对象的实现方式:

public Iservice create(){

return new ServiceImpl1(); // or new ServiceImpl2();

}

a. 特征1:方法返回类型定义:接口Iservice

b. 特征2:返回值对象为 implement 接口的类对象:实例ServiceImpl

文章来源:智云一二三科技

文章标题:《JAVA编程思想》5分钟速成:第9章(接口)

文章地址:https://www.zhihuclub.com/184125.shtml

关于作者: 智云科技

热门文章

网站地图