第4章 接口

第4章 接口﹑内部类和包

4-1 什么是接口?接口和抽象类有哪些相同之处和不同之处?

【答】接口是一组常量和抽象方法的集合。在Java中,接口是一种引用数据类型,用关键字implements声明。接口与抽象类的区别为:

相同点:1.两者都包含抽象方法,约定多个类共用方法的参数列表和返回值。2.两者都不能被实例化。3.两者都是引用数据类型,其变量可被赋值为子类或实现接口类的对象。

不同点:1.抽象类约定多个子类之间共同使用的方法;接口约定多个互不相关类之间共同使用的方法。2.抽象类与子类之间采用单重继承机制;一个类实现多个接口则实现了多重

3.抽象类及其类中成员具有与普通类一样的访问权限;继承的功能。接口的访问权限由public

和缺省两种,接口中成员的访问权限均是public。4.抽象类中可以包含非抽象方法,也可以声明构造方法;接口中的方法必须全部是抽象方法,不能声明构造方法。5.抽象类中可以声明成员变量,子类可以对该成员变量赋值;接口中只能声明常量。

4-2 为什么能够声明接口变量?接口变量能够获得什么样的值?

【答】接口是引用数据类型可以声明接口变量。接口变量能够获得实现接口的类的对象,也称为接口对象。

4-3 接口有哪些特点?为什么需要声明借口?接口是否具有继承性?接口中能否写构造方法?

【答】接口特点:

(1)接口及接口中成员的访问权限都是public

(2)接口中的成员方法都是公有的、抽象的实例成员方法,即默认修饰符为public abstract。

(3)接口中的所有抽象方法必须全部被实现接口的类覆盖。 (4)接口中的成员变量都是常量

(5)接口不能被实例化。接口中的方法都是抽象的,构造方法不是抽象的所有不能写构造方法

(6)接口是引用数据类型。

Java只支持单重继承,以“单重继承+接口”的方式代替多继承。接口可以继承一个已经存在的父接口。

4-4 什么是单重继承?什么是多重继承?类的层次体系为什么需要多重继承?单重继承有什么缺点?既然有缺点,为什么Java仍然采用单重继承?Java怎样实现多重继承? 【答】单重继承就是一个类只能有一个父类。多继承就是可以有多个父类。现实中的对象往往表现出多种特性,用单重继承无法客观描绘,因此需要多重继承。但是C++的多重继承过于复杂,因此Java用“单重继承+接口”代替了多重继承,以提高运行效率,增加安全性,降低复杂性。

4-5 类与类之间存在哪几种关系?

【答】类与类之间有继承关系,还存在嵌套关系。

4-6 在什么情况下需要声明内部类?内部类有哪些特性?

Java不支持C++的结构(struct)类型,【答】当实际中需要使用一个结构时,可以声明一个类;但当结构作为数组的元素类型时,或当一个类中需要使用结构时,可以将结构声明为内部类。内部类特性可参看课本P123。

4-7 为什么是包?为什么需要包机制?Java有哪些包?各有什么功能?

【答】从逻辑概念看,包是类的集合,一个包中包含多个类;从存储概念看,包是类的组织方式,一个包对应一个文件夹,一个文件夹中包含多个字节码文件;包与类的关系,就像文件夹与文件的关系一样。为解决字节码文件存放和类命名的问题,Java提供了包机制。Java的常用包及其作用可查看P130表4-1 。

4-8 Java的API采用什么组织方式?怎样使用Java定义好的类?

【答】Java语言的API按照功能划分成若干包,每个包都有许多公有的类和接口。如果需要使用已定义好的一个包中的类或接口,可以使用import语句声明。

4-9 Java声明Object类的作用是什么?Object类中声明了哪些方法?Object类在Java类层次体系中的地位是怎样的?

【答】Object是Java中所有类的父类或祖先类,它定义了一个Java对象所需要的基本操作和属性。定义的方法有:1.getClass()获得当前对象所在的类是什么、equals()比较两个对象是否相等、toString()将当前对象的信息用字符串描述、finalize()析构方法。

4-10 Java为什么需要声明基本数据类型的包装类?基本数据类型的包装类有哪些?

【答】为实现完全面向对象的特性,Java为每个基本数据类型都声明有对应的一个类。公有8个基本数据类型的包装类:Byte、Short、Integer、Long、Float、Double、Character、Boolean

4-11 怎样将数值类型的数据转换成字符串?怎样将字符串转换成数值类型的数据?

【答】Integer类的静态方法parseInt()和实例方法intValue()都可以将一个字符串转换成int值。Integer类的静态方法toBinaryString(int i)、toOctalString(int i)、Integer.toHexString(int i)可以将十进制i转化为二进制、八进制、十六进制、字符串。

4-12 Java为什么要将Math类声明为最终类?Math类中有哪些常用方法?

【答】Math类提供提供E、PI常量和一组固定数学函数。都是静态可以直接通过类名引用,不需要继承。常用方法有:(1)求绝对值abs(double a)(2)求最大值max(double a,double b)(3)求最小值min(double a,double b)(3)返回一个0.0~1.0之间的随机数random()

4-13 对数值﹑变量或对象进行比较操作,到底应该采用6个关系运算符还是调用equals()、compareTo()方法?是否每个对象都可以调用equals()和compareTo()方法?为什么?这两个方法在进行比较操作时有什么差别?它们在每个类中的含义都相同吗?

【答】对数值、变量可以采用6个关系运算符,对象可以用后两者,但是并不是每个对象都可以调用这两个方法。具体用法及区别请看课本P133和P136.

4-14 System类、Class类和Runtime类各有哪些功能?在之前的程序中已用到这些类的哪些常量或方法?

【答】System类提供访问系统资源和标准输入/输出流的方法,之前用到了in和out常量。

Class为类提供运行时信息,如名字、类型、以及父类等。Runtime类可直接访问运行时资源。

4-15 怎样表示日期与时间数据?怎样引用java.util包的类?

Java以一个长整型表示一个日期,【答】该长整型表示从格林尼治时间1970-1-1 00:00:00 开始至某时刻的累积毫秒数。

4-16 泛型类有什么作用?在什么情况下需要使用泛型类?

【答】泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数,这种参数类型可以用在类、接口、和方法的创建中,分别被称为泛型类、泛型接口、泛型方法。泛型类引入的好处不仅在于减少代码量,还在于提供了编译时期数据类型的检查功能,可以提前预知错误的发生,减少代码安全性,二是减少了强制转换类型。

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4