Java程序设计案例教程(第二版)周怡、张英主编。第6章 习题答案
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
}
//实例方法重载,获取圆的半径
publicvoidgetCircle(doubleR)
{
System.out.println("作一半径为"+R+"的圆:选择圆心位置>>>确定");
}
}
//定义抽象类
abstractclassDraw_Eraser
{
publicvoidgetEraser()
{
System.out.println("选择橡皮擦");
class Complex {
private double x;//实部
private double y;//虚部
public Complex(){}
/**构造函数
* @param x实数部分
* @param y虚数部分
*/
public Complex(double x,double y){
super();
if(x != 0){
sb.append(x);
if(y > 0){
sb.append("+" + y + "i");
}else if(y < 0){
sb.append(y + "i");
}
}else{
if(y != 0){
sb.append(y + "i");
}
}
if(x == 0 && y == 0){
运行时多态性:在编译时不能确定、只有在运行时才能确定执行多个同名方法的哪一个。
五、编程题
1.考虑设计一个绘图工具的面向对象描述,写出代码框架,充分应用抽象、多态等方法。
classDraw_Graph
{
doubleline;
doublecircle;
//定义构造方法
publicDraw_Graph()
}
}
//类Draw_Clean继承抽象类Draw_Eraser并覆盖抽象方法getEraser()
classDraw_CleanextendsDraw_Eraser
{
publicvoidgetEraser()
{
System.out.println("橡皮擦选项:选择橡皮擦>>>选中需要清除内容>>>确定");
9.什么是接口?接口与抽象类有什么区别?
答:接口是一种特殊的数据类型(引用数据类型),主要用于描述某一行为功能所包含的行为方法的基本概况,即方法的名称、返回值类型以及形参表等,是一组常量和抽象方法的集合。
10.什么是编译时多态性?什么是运行时多态性?
答:编译时多态性:多个同名方法在编译时能够确定执行的是哪一个。
{
line=0;
circle=0;
}
//构造方法重载
publicDraw_Graph(doubleL,doubleR)
{
line=L;
circle=R;
}
//获取直线长度
publicvoidgetLine(doubleL)
{
System.out.println("作一长度为"+L+"的直线:选择起点>>>选择方向>>>确定");
4.在Java方法体内中指向当前对象的引用是this,指向父类对象的引用是super。
5.Java中Object类是Java中的终极超类,即唯一没有父类的类。
四、简答题
1.谈谈你对面向对象程序设计的理解。
答:(1)首先需要将客观存在的实体抽象成概念世界中的抽象数据类型,其中包括相关的属性和方法;
(2)用面向对象的工具将该抽象数据类型用计算机逻辑表达出来;
this.x = x;
this.y = y;
}
/**求模
* @return该复数的模
*/
public double mod(){
return x * x + y * y;
}
/**复数间加法
* @param complex加数
* @return计算结果
*/
public Complex add(Complex complex){
构造方法的作用是在使用new关键字创建类的实例的时候被调用来对实例进行初始化。
7.构造方法是否可以被继承?是否可以被重载?试举例
答:构造方法不能够被继承,因为父类构造方法创建的是父类对象,子类必须声明自己的构造方法,创建子类自己的对象。
构造方法可以被重载。例:
public C_Date()
{
year=1900;
答:(1)公有的(public):说明该类成员可被所有类的对象使用
(2)保护的(protected):说明该类成员能被同一类中的其他成员,或其他子类成员,或同一包中的其他类访问,不能被其他包的非子类访问。
(3)默认的(缺省):说明该类成员能被同一类中的其他成员,或同一包中的其他类访问,但不能被其他包的类访问。
}
Public C_Date(int y,int m,int d)
{
year=y;
month=m;
day=d;
}
该类中构造方法C_Date重载。
8.什么是变量的隐藏?什么是方法的覆盖?二者有何区别?
答:变量的隐藏:子类重定义了与父类同名的成员变量;
方法的覆盖:子类重定义了与父类中同名的成员方法,子类方法的参数列表和返回值类型与父类的参数列表以及返回值类型完全相同。
3.调用构造方法是在(B)。
A.类定义时B.创建对象时
C.调用对象方法时D.使用对象的变量时
4.下列对继承的说法,正确的是(B)。
A.子类能继承父类的所有方法和状态
B.子类能继承父类的非私有方法和状态
C.子类只能继承父类public方法和状态
D.子类只能继承父类的方法,而不能继承其状态
5.下列接口的定义中,正确的是(D)。
}
}
publicclass习题6_五_1
{
publicstaticvoidmain(String[] args)
{
//创建并实例化类Draw_Graph对象g
Draw_Graph g=newDraw_Graph(4,3);
//调用类Draw_Graph方法getLine()、getCircle()
g.getLine(4);
(3)最后再将类实例化得到了现实世界中的实体在计算机世界中的映射——对象。
2.什么是类?什么是对象?他们之间的关系是怎样的?
答:类是一种复杂的数据类型,不仅包含数据,还包含对数据进行操作的方法;
对象是显示世界中事物的抽象表示。
类是具有相同或相似性质的对象的抽象。
3.Java设置了几种类成员的访问权限?各表示什么含义?
return "0";
9.Java语言的多态性的实现主要有(B)两种方式。
A.设计时和运行时B.编译时和运行时
C.设计时和编译时D.编译时和存储时
三、填空题
1.面向对象程序设计方法最重要的特性是继承性、封装性和多态性。
2.构造方法是一个特殊的方法,是为对象初始化操作编写的方法,用它来定义对象的初始状态。
3.为了不允许其他子类继承,简单数据类型的包装类都被声明为final。
return new Complex(x,y);
}wenku.baidu.com
/**复数间除法
* @param complex除数
* @return计算结果
*/
public Complex divide(Complex complex){
double x = (this.x * complex.x + this.y * complex.y) / (complex.mod());
double y = (this.y * complex.x - this.x * complex.y) / (complex.mod());
return new Complex(x,y);
}
public String toString(){
StringBuffer sb = new StringBuffer();
return this.add(new Complex(a,0));
}
/**复数间减法
* @param complex减数
* @return计算结果
*/
public Complex subtract(Complex complex){
double x = this.x - complex.x;
double y = this.y - complex.y;
double x = this.x + complex.x;
double y = this.y + complex.y;
return new Complex(x,y);
}
/**复数与实数的加法
* @param a加数
* @return计算结果
*/
public Complex add(double a){
return new Complex(x,y);
}
/**复数与实数的减法
* @param a减数
* @return计算结果
*/
public Complex subtract(double a){
return subtract(new Complex(a,0));
}
/**复数间乘法
* @param complex乘数
(4)私有的(private):说明该类成员只能被同一类中的其他成员访问,不能被其他类的成员访问,也不能被子类成员访问。
4.为什么要将类封装起来?封装的原则是什么?
答:因为封装的类之间互相独立、互不干扰,但可以通过规定的数据接口来进行数据交换,即能保证数据的安全又能提高类之间相互组合的高效性。
一、将数据和对数据的操作组合起来构成类,类是一个不可分割独立单位。
A.1 B.2 C.3 D.任意
7.下面有关接口的说法,正确的是(D)。
A.接口与抽象类是相同的概念
B.实现一个接口必须实现接口的所有方法
C.接口之间不能有继承关系
D.一个类可以实现多个接口
8.Java语言的多态现象,主要表现在(A)两个方面。
A.方法重载和成员覆盖B.方法重载和抽象对象
C.抽象对象和成员覆盖D.创建接口和方法继承
二、类中既要提供与外部联系的方法,同时又要尽可能隐藏类的实现细节和保护自身数据的安全性。
5.什么是继承?什么是多态?方法的重载和覆盖有什么区别?
答:继承:由已有的类创建新类,从而自动实现类中方法和数据共享。
多态:同一名字的方法可以有多种实现,具有完全不同的执行效果或呈现出不同的执行结果状态。
方法的重载:在同一个类中,相同的方法名对应着不同的方法体,方法的参数也不相同。方法重载表现为同一个类中方法的多态性,一个类中可以定义多个参数不同的同名方法,属于编译时多态性。
g.getCircle(3);
//创建并实例化类Draw_Clean对象c
Draw_Clean c=newDraw_Clean();
//调用类Draw_Clean方法get.Eraser()
c.getEraser();
}
}
2.编写一个复数类,具有实部、虚部成员变量,可以完成加、减、乘、获得实部和虚部等方法,并编写一个主类对其进行测试。
习题6
一、判断题
1.父类的引用变量可以指向它的子类的对象。(√)
2.Java语言中从一个父类可以派生出多个子类,一个子类可以有多个父类。(×)
3.在构造方法中如调用super(),则必须使其为该构造方法的第一句。(√)
4.Java语言中的接口可以继承,一个接口通过关键字extends可以继承另一个接口,一个Java的类可以通过关键字implements实现多个接口。(√)
5.Math类是final类,因此在被其他类继承时其中的方法不能被重写。(×)
二、选择题
1.下列说法中,正确的是(A)。
A.类是变量和方法的集合体B.数组是无序数据的集合
C.抽象类可以实例化D.类成员数据必须是共有的
2.下面对形参的说法中,正确的是(C)。
A.必须有多个B.至少有一个
C.可以没有D.只能是简单变量
方法的覆盖:在子类中重定义父类的同名方法。方法覆盖表现为父类与子类之间的方法的多态性,其中形参表、返回值类型也必须相同,且子类方法不能有比父类方法更严格的访问权限。可以为编译时多态性或运行时多态性。
6.什么叫构造方法?构造方法的作用是什么?
答:构造方法是对象实例化时完成对象及其成员变量的初始化时所调用的一种特殊的方法。
A.interface a{ B. interface a{
int I;int I=I;
void g(){}} void g(){}}
C.interface a{ D. interface a{
int I; int I=5;
protected void g();} void g();}
6.一个类可以同时继承或实现(D)个接口。
* @return计算结果
*/
public Complex multiply(Complex complex){
double x = this.x * complex.x - this.y * complex.y;
double y = this.y * complex.x + this.x * complex.y;
//实例方法重载,获取圆的半径
publicvoidgetCircle(doubleR)
{
System.out.println("作一半径为"+R+"的圆:选择圆心位置>>>确定");
}
}
//定义抽象类
abstractclassDraw_Eraser
{
publicvoidgetEraser()
{
System.out.println("选择橡皮擦");
class Complex {
private double x;//实部
private double y;//虚部
public Complex(){}
/**构造函数
* @param x实数部分
* @param y虚数部分
*/
public Complex(double x,double y){
super();
if(x != 0){
sb.append(x);
if(y > 0){
sb.append("+" + y + "i");
}else if(y < 0){
sb.append(y + "i");
}
}else{
if(y != 0){
sb.append(y + "i");
}
}
if(x == 0 && y == 0){
运行时多态性:在编译时不能确定、只有在运行时才能确定执行多个同名方法的哪一个。
五、编程题
1.考虑设计一个绘图工具的面向对象描述,写出代码框架,充分应用抽象、多态等方法。
classDraw_Graph
{
doubleline;
doublecircle;
//定义构造方法
publicDraw_Graph()
}
}
//类Draw_Clean继承抽象类Draw_Eraser并覆盖抽象方法getEraser()
classDraw_CleanextendsDraw_Eraser
{
publicvoidgetEraser()
{
System.out.println("橡皮擦选项:选择橡皮擦>>>选中需要清除内容>>>确定");
9.什么是接口?接口与抽象类有什么区别?
答:接口是一种特殊的数据类型(引用数据类型),主要用于描述某一行为功能所包含的行为方法的基本概况,即方法的名称、返回值类型以及形参表等,是一组常量和抽象方法的集合。
10.什么是编译时多态性?什么是运行时多态性?
答:编译时多态性:多个同名方法在编译时能够确定执行的是哪一个。
{
line=0;
circle=0;
}
//构造方法重载
publicDraw_Graph(doubleL,doubleR)
{
line=L;
circle=R;
}
//获取直线长度
publicvoidgetLine(doubleL)
{
System.out.println("作一长度为"+L+"的直线:选择起点>>>选择方向>>>确定");
4.在Java方法体内中指向当前对象的引用是this,指向父类对象的引用是super。
5.Java中Object类是Java中的终极超类,即唯一没有父类的类。
四、简答题
1.谈谈你对面向对象程序设计的理解。
答:(1)首先需要将客观存在的实体抽象成概念世界中的抽象数据类型,其中包括相关的属性和方法;
(2)用面向对象的工具将该抽象数据类型用计算机逻辑表达出来;
this.x = x;
this.y = y;
}
/**求模
* @return该复数的模
*/
public double mod(){
return x * x + y * y;
}
/**复数间加法
* @param complex加数
* @return计算结果
*/
public Complex add(Complex complex){
构造方法的作用是在使用new关键字创建类的实例的时候被调用来对实例进行初始化。
7.构造方法是否可以被继承?是否可以被重载?试举例
答:构造方法不能够被继承,因为父类构造方法创建的是父类对象,子类必须声明自己的构造方法,创建子类自己的对象。
构造方法可以被重载。例:
public C_Date()
{
year=1900;
答:(1)公有的(public):说明该类成员可被所有类的对象使用
(2)保护的(protected):说明该类成员能被同一类中的其他成员,或其他子类成员,或同一包中的其他类访问,不能被其他包的非子类访问。
(3)默认的(缺省):说明该类成员能被同一类中的其他成员,或同一包中的其他类访问,但不能被其他包的类访问。
}
Public C_Date(int y,int m,int d)
{
year=y;
month=m;
day=d;
}
该类中构造方法C_Date重载。
8.什么是变量的隐藏?什么是方法的覆盖?二者有何区别?
答:变量的隐藏:子类重定义了与父类同名的成员变量;
方法的覆盖:子类重定义了与父类中同名的成员方法,子类方法的参数列表和返回值类型与父类的参数列表以及返回值类型完全相同。
3.调用构造方法是在(B)。
A.类定义时B.创建对象时
C.调用对象方法时D.使用对象的变量时
4.下列对继承的说法,正确的是(B)。
A.子类能继承父类的所有方法和状态
B.子类能继承父类的非私有方法和状态
C.子类只能继承父类public方法和状态
D.子类只能继承父类的方法,而不能继承其状态
5.下列接口的定义中,正确的是(D)。
}
}
publicclass习题6_五_1
{
publicstaticvoidmain(String[] args)
{
//创建并实例化类Draw_Graph对象g
Draw_Graph g=newDraw_Graph(4,3);
//调用类Draw_Graph方法getLine()、getCircle()
g.getLine(4);
(3)最后再将类实例化得到了现实世界中的实体在计算机世界中的映射——对象。
2.什么是类?什么是对象?他们之间的关系是怎样的?
答:类是一种复杂的数据类型,不仅包含数据,还包含对数据进行操作的方法;
对象是显示世界中事物的抽象表示。
类是具有相同或相似性质的对象的抽象。
3.Java设置了几种类成员的访问权限?各表示什么含义?
return "0";
9.Java语言的多态性的实现主要有(B)两种方式。
A.设计时和运行时B.编译时和运行时
C.设计时和编译时D.编译时和存储时
三、填空题
1.面向对象程序设计方法最重要的特性是继承性、封装性和多态性。
2.构造方法是一个特殊的方法,是为对象初始化操作编写的方法,用它来定义对象的初始状态。
3.为了不允许其他子类继承,简单数据类型的包装类都被声明为final。
return new Complex(x,y);
}wenku.baidu.com
/**复数间除法
* @param complex除数
* @return计算结果
*/
public Complex divide(Complex complex){
double x = (this.x * complex.x + this.y * complex.y) / (complex.mod());
double y = (this.y * complex.x - this.x * complex.y) / (complex.mod());
return new Complex(x,y);
}
public String toString(){
StringBuffer sb = new StringBuffer();
return this.add(new Complex(a,0));
}
/**复数间减法
* @param complex减数
* @return计算结果
*/
public Complex subtract(Complex complex){
double x = this.x - complex.x;
double y = this.y - complex.y;
double x = this.x + complex.x;
double y = this.y + complex.y;
return new Complex(x,y);
}
/**复数与实数的加法
* @param a加数
* @return计算结果
*/
public Complex add(double a){
return new Complex(x,y);
}
/**复数与实数的减法
* @param a减数
* @return计算结果
*/
public Complex subtract(double a){
return subtract(new Complex(a,0));
}
/**复数间乘法
* @param complex乘数
(4)私有的(private):说明该类成员只能被同一类中的其他成员访问,不能被其他类的成员访问,也不能被子类成员访问。
4.为什么要将类封装起来?封装的原则是什么?
答:因为封装的类之间互相独立、互不干扰,但可以通过规定的数据接口来进行数据交换,即能保证数据的安全又能提高类之间相互组合的高效性。
一、将数据和对数据的操作组合起来构成类,类是一个不可分割独立单位。
A.1 B.2 C.3 D.任意
7.下面有关接口的说法,正确的是(D)。
A.接口与抽象类是相同的概念
B.实现一个接口必须实现接口的所有方法
C.接口之间不能有继承关系
D.一个类可以实现多个接口
8.Java语言的多态现象,主要表现在(A)两个方面。
A.方法重载和成员覆盖B.方法重载和抽象对象
C.抽象对象和成员覆盖D.创建接口和方法继承
二、类中既要提供与外部联系的方法,同时又要尽可能隐藏类的实现细节和保护自身数据的安全性。
5.什么是继承?什么是多态?方法的重载和覆盖有什么区别?
答:继承:由已有的类创建新类,从而自动实现类中方法和数据共享。
多态:同一名字的方法可以有多种实现,具有完全不同的执行效果或呈现出不同的执行结果状态。
方法的重载:在同一个类中,相同的方法名对应着不同的方法体,方法的参数也不相同。方法重载表现为同一个类中方法的多态性,一个类中可以定义多个参数不同的同名方法,属于编译时多态性。
g.getCircle(3);
//创建并实例化类Draw_Clean对象c
Draw_Clean c=newDraw_Clean();
//调用类Draw_Clean方法get.Eraser()
c.getEraser();
}
}
2.编写一个复数类,具有实部、虚部成员变量,可以完成加、减、乘、获得实部和虚部等方法,并编写一个主类对其进行测试。
习题6
一、判断题
1.父类的引用变量可以指向它的子类的对象。(√)
2.Java语言中从一个父类可以派生出多个子类,一个子类可以有多个父类。(×)
3.在构造方法中如调用super(),则必须使其为该构造方法的第一句。(√)
4.Java语言中的接口可以继承,一个接口通过关键字extends可以继承另一个接口,一个Java的类可以通过关键字implements实现多个接口。(√)
5.Math类是final类,因此在被其他类继承时其中的方法不能被重写。(×)
二、选择题
1.下列说法中,正确的是(A)。
A.类是变量和方法的集合体B.数组是无序数据的集合
C.抽象类可以实例化D.类成员数据必须是共有的
2.下面对形参的说法中,正确的是(C)。
A.必须有多个B.至少有一个
C.可以没有D.只能是简单变量
方法的覆盖:在子类中重定义父类的同名方法。方法覆盖表现为父类与子类之间的方法的多态性,其中形参表、返回值类型也必须相同,且子类方法不能有比父类方法更严格的访问权限。可以为编译时多态性或运行时多态性。
6.什么叫构造方法?构造方法的作用是什么?
答:构造方法是对象实例化时完成对象及其成员变量的初始化时所调用的一种特殊的方法。
A.interface a{ B. interface a{
int I;int I=I;
void g(){}} void g(){}}
C.interface a{ D. interface a{
int I; int I=5;
protected void g();} void g();}
6.一个类可以同时继承或实现(D)个接口。
* @return计算结果
*/
public Complex multiply(Complex complex){
double x = this.x * complex.x - this.y * complex.y;
double y = this.y * complex.x + this.x * complex.y;