编程知识 cdmana.com

《JAVA编程思想》学习笔记:第9章(接口)

目录
Java编程思想(一)第1~4章:概述
Java编程思想(二)第5章:初始化和清理
Java编程思想(三)第6章:访问权限
Java编程思想(四)第7章:复用类
Java编程思想(五)第8章:多态
Java编程思想(六)第9章:接口
Java编程思想(七)第10章:内部类
Java编程思想(八)第11章:持有对象
Java编程思想(九)第12章:异常
Java编程思想(十)第13章:字符串
Java编程思想(十一)第14章:类型信息
Java编程思想(十二)第15章:泛型

第9章 接口

目录

9.1 C++的抽象设计 :

9.2 Java的抽象设计 :

9.3 Java的多重继承实现:

9.4 Java的接口多层嵌套:

9.5 接口与工厂方法:


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的接口多层嵌套:

 

9.5 接口与工厂方法:

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

public Iservice create(){

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

}

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

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

版权声明
本文为[架构师训练营]所创,转载请带上原文链接,感谢
https://cbk419323.blog.csdn.net/article/details/104095215

Scroll to Top