JAVA语言与面向对象程序设计课后习题答案(3)

2019-05-27 20:54

int i =0; //当前报数的人的下标 int s = 0; //当前报的数字 int cnt = 0; //已有多少人出局 while(true){ if( a[i] ) s++; //如果在队列中,则报数 if( s == 5 ){//如果数到5 System.out.println( (i+1) ); //显示该人的序号 a[i] = false; //该人出局 s = 0; //报的数归0 cnt ++; if( cnt == N )break; //全部的人都出局,结束 } i++; //到下一个人 if( i==N) i=0; //因为队伍是一个圆圈 } } }

20.用―埃氏筛法‖求2-100以内的素数。2-100以内的数,先去掉2的倍数,再去掉3的倍数,再去掉4的倍数,以此类推……最后剩下的就是素数。

答:见程序。import java.io.*; public class Ex3_20 { public static void main(String[] args) { int N = 100; boolean [] a = new boolean[N+1]; for( int i=0; i<=N; i++ ) a[i]=true; for( int i=2; i<=N; i++ ){ for( int j=2*i; j<=N; j += i ){ a[j] = false; } } for( int i=2; i<=N; i++ ){ if( a[i] ) System.out.println( i ); } } }

第4章 类、包和接口

1.使用抽象和封装有哪些好处?

答:抽象可以提供事物的本质特征。封装(Encapsulation)是这样一种编程机制,它把代码和其操作的数据捆绑在一起,从而防止了外部对数据和代码的干扰和滥用,保证了数据和代码的安全性。

2.编写一个Java程序片断定义一个表示学生的类student,包括域―学号‖、‖班号‖、―姓名‖、―性别‖、―年龄‖;方法―获得学号‖、―获得班号‖、―获得性别‖、―获得年龄‖、―修改年龄‖。class

public class exercise7 { public static void main(String args[]) {

Student stu = new Student(\班\ System.out.println(stu.toString()); } }

class Student{

private String stuNumber; private String stuClass; private String stuName; private int stuAge;

Student(String name,String number, int age, String cls) { stuName = name; stuNumber = number; stuClass = cls; stuAge = age; }

public String getStuNumber() { return stuNumber; }

public String getStuClass() { return stuClass; }

public String getStuName() { return stuName; }

public int getStuAge() { return stuAge; }

public void setStuAge(int age) { stuAge = age; }

public String toString() { String infor = \学生姓名:\ \学生年龄:\ \学生班级:\ \学生学号:\ return infor; } } 3.为student类定义构造方法初始化所有的域,增加一个方法public String toString()把Sttldent类对象的所有域信息组合成一个字符串。编写Application程序检验新增的功能。

答:见程序。class Ex4_3 { public static void main(String[] args)

{ Student s = new Student( \软件专业班\ \李明\ System.out.println( s ); } }

class Student { //\学号\、\班号\、\姓名\、\性别\、\年龄\ String id; String classId; String name; boolean sex; int age; public String getId() { return id; } public String getClassId() { return classId; } public String getName() { return name; } public boolean getSex() { return sex; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public Student( String id, String classId, String name, boolean sex, int age ) { this.id = id; this.classId = classId; this.name = name; public String toString() this.age = age; this.sex = sex; } { return name + id + classId + + age + \岁,\ (sex ? \男\女\ } }

4.什么是最终类,如何定义最终类?试列举最终类的例子。

答:最终类是指类被final修饰符所修饰和限定的类,最终类不能被继承,即不可能有子类。如Java中的String类就是最终类。

5.如何定义静态域?静态域有什么特点?如何访问和修改静态域的数据?

答:对域使用static修饰,则定义了静态域。静态域最本质的特点是:它们是类的域,不属于任何一个类的具体对象实例。它不保存在某个对象实例的内存区间中,而是保存在类的内存区域的公共存储单元。

在Java中,静态域(类变量)可以通过类名直接访问,也可以通过实例对象来访问,两种方法的结果是相同的。

6.什么是静态初始化器?它有什么特点? 与构造方法有什么不同?

静态初始化器是由关键字static引导的一对大括号{}括起的语句组。它的作用与类的构造方法有些相似,都是用来完成初始化的工作,但是静态初始化器在三点上与构造方法有根本的不同:

(1) 构造方法是对每个新创建的对象初始化,而(2) 静态初始化器是对类自身进行初始化。 (3) 构造方法是在用new运算符产生新对象时由系统自动执行;而(4) 静态初始化器一般不

(5) 能由程序来调用,(6) 它是在所属的类加载入内存时由系统调用执行。 (3)不同于构造方法,静态初始化器不是方法,没有方法名、返回值和参数列表。 (4)同static方法一样,它不能访问实例域和实例方法。

7.如何定义方法?在面向对象程序设计中方法有什么作用?

答:方法是类的动态属性,标志了类所具有的功能和操作,用来把类和对象的数据封装在 一起。Java的方法与其他语言中的函数或过程类似,是一段用来完成某种操作的程序片断。方法由方法头和方法体组成,其一般格式如下:

修饰符1 修饰符2 …… 返回值类型 方法名(形式参数列表) throws异常列表{

方法体各浯句; }

8.什么是抽象方法?它有何特点?如何定义抽象方法?如何使用抽象方法?

答:被abstract所修饰的方法叫抽象方法,抽象方法的作用在为所有子类定义一个统一的接口。对抽象方法只需声明,而不需实现,即用分号(;)而不是用{},格式如下:

abstract returnType abstractMethod( [paramlist] );

9.如何定义静态方法?静态方法有何特点?静态方法处理的域有什么要求? 答:用static修饰符修饰的方法是仅属于类的静态方法,又称为类方法。与此相对,不用static修饰的方法,则为实例方法。类方法的本质是该方法是属于整个类的,不是属于某个实例的。

静态方法中,不能访问实例变量。在类方法中不能使用this 或super。

10.什么是访问控制符?有哪些访问控制符?哪些可以用来修饰类?哪些用来修饰域和方法?试述不同访问控制符的作用。

答:访问控制符是指public/private/protected等表示访问控制(Access Control)的修饰符,其作用是更好地控制类及其域、方法的存取权限,更好地实现信息的封装与隐藏,

方法的访问控制符包括private, protected, public和―默认访问控制符‖。

类中限定为private的成员(域或方法)只能被这个类本身访问,即私有访问控制。

类中的成员缺省访问控制符时,称为缺省访问控制。缺省访问控制的成员可以被这个类本身和同一个包中的类所访问,即包访问控制。

类中限定为protected的成员可以被这个类本身,它的子类(包括同一个包中以及不同包中的子类)以及同一个包中所有其他的类访问。

类中限定为public的成员可以被所有的类访问。

Java中还有一种访问控制符为private proteced,它限定能被本类及其子类可以访问,而包中的其他非子类的类不能访问。

类的访问控制符或者为public,或者缺省。(但内部类可以有private、protected等访问控制符。)

如果类用public修饰,则该类可以被其他类所访问;若类缺省访问控制符,则该类只能被同包中的类访问。

11.修饰符是否可以混合使用?混合使用时需要注意什么问题?

答:修饰符可以混合使用,如public static。但也要注意一些规则,如final及abstract不能修饰同一个方法。

12.什么是继承?什么是父类?什么是子类?继承的特性给面向对象编程带来什么好处?什么是单重继承?什么是多重继承?

答:继承(Inheritance)是一个对象获得另一个对象的属性的过程。它的重要性源于它支持按层次分类概念。这与现实世界是一致的,大多数知识因为层次化分类而变得容易掌握(即从上至下)。

在类的层次关系中,被继承的类称为父类,继承其他类的类称为子类。

使用继承,一个对象可以从它父类继承所有的通用属性,而只需定义它特有的属性。所以,正是继承机制可以使一个对象成为一个更通用类的一个特例成为可能。

一个类只有一个直接父类,称为单重继承;一个类有多个直接父类,则是多重继承。Java语言中采用单重继承。

13.如何定义继承关系? 为―学生‖类派生出―小学生‖、―中学生‖、―大学生‖、―研究生‖四个类,其中―大学生‖类再派生出―一年级学生‖、二年级学生‖、 ―三年级学生‖、―四年级学生‖四个子类,―研究生‖类再派生出―硕士生’’和―博土生’’两个子类。

答:在Java中,通过extends关键字来定义继承关系。 具体示例见源程序。class Ex4_13 { public static void main(String[] args) { }

class Student{}

class Pupil extends Student{}

class MiddleSchollStudent extends Student{} class UnderGraduateStudent extends Student{} class Graduate extends Student{}

class Freshman extends UnderGraduateStudent{}

class Master extends Graduate{} class PhD extends Graduate{} { }; }

14.―子类的域和方法的数目一定大于等于父类的域和方法的数目‖,这种说法是否 正确?为什么?

答:如果考虑到可以子类既可以继承父类的方法,而不能继承私有的方法,那么这种说法是不正确的。

15.什么是域的隐藏?

答:在子类中定义与父类同名的域,称为域的隐藏。

16.什么是方法的覆盖?方法的覆盖与域的隐藏有何不同?与方法的重载有何不同?

答:子类重新定义与父类同名的方法,称为对父类方法的覆盖(Overriding)。子类在重新定义父类已有的方法时,应保持与父类完全相同的方法头声明,即应与父类有完全相同的方法名、返回值和参数类型列表。

方法的重载是指定义几个同名的方法,但它们的参数类型列表不同。 17.解释this和super的意义和作用。


JAVA语言与面向对象程序设计课后习题答案(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:酒店客房管理系统毕业设计(论文)

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: