《Java程序设计基础》第8章习题

8.1 子类将继承父类的所有成员吗?为什么?
不是。子类只会继承父类中的非私有成员,也就是说,子类不能继承父类中的private成员。

8.2 在子类中可以调用父类的构造方法吗?若可以,如何调用?
可以。
程序执行子类的构造方法之前,会先调用父类中没有参数的构造方法。但如果父类中有多个构造方法,可以通过super()语句来调用父类特定的构造方法。
调用方式为:
super(); //调用父类无参构造方法
super(参数); //调用父类中与参数匹配的构造方法
调用父类构造方法的语句必须出现在子类构造方法的第一句。若子类构造方法没有显式调用父类构造方法, 则编译器把super()作为子构造方法的第一条语句。

8.3 在调用子类的构造方法之前,若没有指定调用父类的特定构造方法,则会先自动调用父类中没有参数的构造方法,其目的是什么?
其目的是为了帮助继承自父类的成员做初始化操作。

8.4 在子类中可以访问父类的成员吗?若可以,用什么方式访问?
可以。在子类中使用super可以访问父类的成员,格式如下:
super.方法名(参数);
super.变量名;
另外,由于在子类中不能继承父类中的private成员,所以无法在子类中访问父类中的这种成员。但如果将父类中的成员声明为protected成员,则这种成员不仅可以在父类中直接访问,也可以在子类中直接访问。

8.5 用父类对象变量可以访问子类的成员方法吗?若可以,则只限于什么情况?
可以。只限于“覆盖”的情况发生时,也就是说,父类与子类的方法名称、参数个数与类型必须完全相同,才可通过父类的对象变量调用子类的方法。

8.6 什么是“多态机制”?Java语言是如何实现多态的?
①“多态机制”是指一个程序中同名的多个不同方法共存的情况,即一个对外接口,多个内在的实现方法。
②Java语言通过子类对父类方法的覆盖实现多态,也可以利用重载在同一个类中定义多个同名的不同方法来实现多态。

8.7 方法的覆盖与方法的重载有何不同?
重载是指在同一个类内定义名称相同,但参数个数或者类型不同的方法,而覆盖则是指在子类中,定义名称、参数个数与类型均与父类相同的方法,用以重写父类里同名方法的功能。
8.8 this和super分别有什么特殊的含义?
super()与this()的功能相似,但super()是从子类的构造方法调用父类的构造方法,而this()则是在同一个类内调用其他的构造方法。当构造方法有重载时,super()与this()均会根据所给出的参数类型与个数,正确的执行相对应的构造方法

8.9 什么是最终类与最终方法?它们的作用是什么?
①最终类是指被final修饰符所修饰,不能再被其他类所继承的类;最终方法是指所有已被private修饰符限定为私有的方法,以及所有包含在final类中的方法。
②它们的作用是增加代码的安全性,因为最终类与最终方法不能再被子类所覆盖,对于一些比较重要且不希望被子类重写的方法、类来说是很有必要的

8.10 什么是抽象类与抽象方法?使用时应注意哪些问题?
①用关键字abstract修饰的类就是抽象类;没有方法体的方法,且首部用关键字abstract修饰,就是抽象方法。
②需要注意的是:由于抽象类是需要被继承的,所以abstract类不能用final来修饰;abstract不能与private、static、final或native并列修饰同一方法;习惯上,在类说明中,关键字public或private放在final或abstract的前面;抽象类中不一定包含抽象方法,但包含抽象方法的类一定要声明为抽象类;抽象类不能用new运算符创建具体实例对象,而必须通过覆盖的方式实现抽象类中的方法。

8.11 什么是接口?为什么要定义接口?
接口是一个类所具有的方法的特征集合,它的结构与抽象类相似。
因为接口可以隐藏实施细节和实现多重继承。

8.12 如何定义接口?接口与类有哪些异同?
接口的定义:

[public] interface接口名称[extends父类口名列表]

{
[public][static][final]数据类型 常量名=常量;
......
[public][abstract]返回值的数据类型 方法名(参数表);
......
[public] static 返回值的数据类型 方法名(参数表);
{
方法体;
}
......
[public] default 返回值的数据类型 方法名(参数表);
{
方法体;
}
......


}

接口与类的异同:
接口与一般类一样,本身也具有数据成员与数据方法,但数据成员必须是静态且必须初始化初值,此值不能再被修改,若省略数据成员的修饰符,系统默认为public static final;对抽象方法,若省略修饰符,系统默认为public abstract;静态方法是用public static修饰的;默认方法使用public default修饰。
接口只定义方法但没有实现,只有在实现接口的类中去实现,但是类中的所有方法都是实现的(抽象类除外)。接口可以多重继承,但类不可以。与抽象类不同,接口的数据成员都是静态的且必须初始化,即数据成员必须是静态常量。接口中除了声明抽象方法外,还可以定义静态方法和默认方法,但不能定义一般方法。

8.13 在多个父接口的实现类中,多个接口中的方法名冲突问题有几种形式?如何解决?
四种。如下:
(1)如果多个父接口中的同名方法均是默认方法,则在实现这多个接口的类中解决名字冲突问题有两种办法,一种提供同名方法的一个新实现;另一种是委托某个父接口的默认方法。
(2)如果多个父接口中的多个同名方法中既有默认方法又有抽象方法,则解决办法同(1)。
(3)如果多个父接口中的同名方法都是抽象方法,则不会发生名字冲突,实现这些接口的类可以实现该同名方法即可,或者不实现该方法而将自己也声明为抽象类。
(4)如果一个类继承一个父类并实现了多个接口,而从父类和接口中继承了同名的方法,此时采用“类比接口优先”的原则,即只继承父类的方法,而忽略来自接口的默认方法。

8.14 编程题。定义一个表示一周七天的枚举,并在主方法main()中遍历枚举所有成员。

enum Week  
{
   Monday,Tuesday,Wednesday,Thursday,Firday,Saturday,Sunday
}
public class homeWork
{
    public static void main(String[] args)
	{
		for(Week d:Week.values())
		{
			System.out.println(d.name());
		}
    }
}

8.15 什么是包?它的作用是什么?如何创建包?如何引用包中的类?
包就是java语言提供的一种区别类名空间的机制,是类的组织方式,包对应一个文件夹,包中还可以再有包。

作用:用来管理具有相互关系的部分类。

创建:package包名1[包名.2[.包名3]……]

引用包中的类:import[.[……]].|

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值