第五章考试题
一、选择题:(每题3分,共20题)
1. 下面关于类的说法错误的一项是( d )。
A、类属于Java语言中的复合数据类型 B、对象是Java语言中的基本结构单位 C、类是同种对象的集合和抽象 D、类就是对象 2. 如下所示代码:
public class Test05_01{ private float a; public static void m ( ){ } }
如何使成员变量a被方法m( )访问( b )。 A、将private float a改为public float a B、将private float a改为static float a C、将private float a改为protected float a D、将private float a改为float a
3. 下面关于类的说法有误的一项是( a )。
A、类就是对象 B、类是同种对象的集合和抽象 C、类属于Java语言中的复合数据类型 D、对象是Java语言中的基本结构单位 4. 下列哪种类成员修饰符修饰的变量只能在本类中被访问( c )。
A、protected B、default C、private D、public 5. 下面关于方法的说法不正确的一项是( d )。
A、类的私有方法不能被其他类直接访问。 B、Java中的构造方法名必须和类名相同。
C、方法体是对方法的实现,包括变量声明和合法语句。
D、如果一个类定义了构造方法,也可以用该类的默认构造方法。 6. 下列程序的运行结果是( b )。
public class Test05_02 extends x{ int ab(){ static int a = 10; a++; System.out.println(a); } public static void main(String[] args) { Test05_02 b = new Test05_02 (); b.ab(); } } A、10 B、编译错误 C、11 D、运行成功,但不输出 7. 下面关于构造方法的描述有误的一项是( a )。
A、构造方法必须要有返回类型的声明。
8.
9.
10.
11. 12. 13.
14.
15.
16. 17.
18.
B、构造方法和类中的方法很相似:有访问修饰符、方法名、参数列表、方法体。 C、构造方法当成是一个特殊的方法,这个方法的作用就是用来产生一个类的实例。 D、构造方法的方法名必须和类名完全相同。 下列关于对象的说法错误的一项是( b )。
A、对象成员是指一个对象所拥有的属性或可以调用的方法。
B、由类生成对象,称为类的实例化过程,一个实例可以是多个对象。 C、在创建类的对象时,需要使用Java的new关键字。
D、在Java中要引用对象的属性和方法,需要使用“.”操作符来实现。 类的方法可以不包含下面哪一项( a )。 A、方法的参数 B、方法的主体 C、方法的名称 D、方法的返回值类型 下面关于变量说法错误的一项是( c )。
A、对于成员变量,我们可以不需要手动的显式初始化,因为系统在创建一个新的对象的时候,会给这些成员变量赋一个初值。
B、对于引用变量,它的默认初值是null而非相应的引用类型对象,也就是说,它并不是指向任何对象的首地址。
C、系统会对全局(成员)变量指定默认的值,也会对局部变量赋值。 D、局部变量在使用之前,必须对其进行显式初始化。
下面的各种数据类型的默认初始化值表示错误的一项是(b )。 A、int是0 B、float 是0.0 C、char 是‘\\u0000’ D、boolean是false 下面哪一项不是Java的访问控制符( c )。 A、public B、private C、void D、protected Java语言类间的继承关系和接口间的继承关系分别是( d )。 A、单继承、不能继承 B、多重继承、不能继承 C、多重继承、单继承 D、单继承、多重继承
如果局部变量和成员变量同名,如何在局部变量作用域内引用成员变量(c )。 A、不影响,系统可以自己区分
B、不能引用,必须改名,使它们的名称不相同 C、在成员变量前加this,使用this访问该成员变量 D、在成员变量前加super,使用super访问该成员变量 下列关于内部类说法错误的一项是( b )。 A、内部类可用private或protected修饰符修饰 B、内部类不能有自己的成员方法和成员变量
C、除static内部类外,不能在类内声明static成员
D、内部类可以作为其他类的成员,而且可访问它所在的类的成员 定义外部类时不能用到的关键字是( c )。 A、public B、abstract C、protected D、final 下面说法不正确的一项是( a )。 A、abstract和final能同时修饰一个类 B、抽象类既可以做父类,也可以做子类
C、声明为final类型的方法不能在其子类中重新定义
D、抽象类中可以没有抽象方法,有抽象方法的类一定是抽象类或接口 有一个类B,下面为其构造方法的声明,正确的是( c )。 A、void b(int x) {} B、void B(int x) {}
C、B(int x) {} D、b(int x) {} 19. 区分类中重载方法的依据是( c )。
A、不同的形参名称 B、返回值的类型不同 C、形参列表的类型和顺序 D、访问权限不同 20. 下面说法错误的一项是( a )。
A、在Java中,为了节省创建对象的时间和空间,对于一些常用的方法,会将它在内存中缓存起来。 B、在JDK中针对各种基本数据类型分别定义相应的引用类型,称之为封装类(Wrapper Classes)。
C、JDK5.0中,引入了自动装箱/拆箱功能,可以让我们方便的在简单类型和对应的封装类型数据之间转换。
D、在Object类中,定义了一个toString()方法,用来返回一个表示这个对象的字符串。
二、简答题:(每题8分,共5题)
1. 请分别描述封装、继承、多态的含义。
2. 在进行方法的重载时,有四条基本原则需要遵守,请写出这四条原则。 3. 请举例说明对象和类的区别。
4. 请分析Overload和Override的区别(即重载和重写的区别)。
5. 编写一个人类Person,其中包含姓名、性别和年龄的属性,包含构造方法以及显示姓
名、性别和年龄的方法。再编写一个学生类Student,它继承Person类,其中包含学号属性,包含构造方法以及显示学号的方法。最后编写一个主类Java05_01,包含main()方法,在main()方法中定义两个学生s1和s2并给他们赋值,最后显示他们的学号、姓名、性别以及年龄。
二、简答题: 1. 答:① 封装,简单理解就是把一系列的数据放在一个类中,如果形容一个人(假设吧‘人’
作为一个类),我们可以用身高(hight),体重(weight)等来描述,如果不封装,我们需要3个变量来形容它。在面向对象中,可以用一个Person类封装这些数据,Person具有3个成员变量,分别是 height,weight。使用的时候,每当生成一个这样的类的对象,就具有这3个属性。② 继承,如果B类继承A类。那么B类将具有A类的所有方法,同时还可以扩展自己独有的方法和属性。还用人做例子。‘人’是父类,那么‘男人’,‘女人’都是继承自‘人’。也就是说,不论‘男人’,‘女人’,都具有‘身高’,‘体重’这两个属性,同时,他们可以有自己独有的属性。比如‘男人’可以有一个‘妻子’属性来表示他的妻子是谁,而女人可以有‘丈夫’属性。③ 多态,在java中,同一个方法可以有多种不同的表现形式,具体说来分为重载和重写。重载就是一个方法的方法名相同而所具有的参数列表不同。比如:
public String talk(String content); //参数是String,
public String talk(String content, int number) //参数是2个,String和int 重载则是子类在继承父类的同时,重新实现了父类的某个方法。重载的方法名和参数都必须完全相同。
2. 答:①方法名相同;②参数列表必须不同;③返回值可以不同;④可以相互调用。 3. 答:用一个具体的例子来进一步说明“类”和“对象”之间的联系与区别。以汽车为例,
只要是汽车,都应该有以下一些特性:轮子、引擎、方向盘、刹车等等组件,可以通过这些组件来操作汽车,改变汽车的状态,如加速、转向、减速等,这些都是汽车的共性。具体到某辆汽车,它可能有80cm的轮子、40cm的方向盘、A6引擎,它是一个确定的实例。使用“汽车类”这个蓝图,就可以生产出一辆辆的汽车“实例”。这和盖房子一样,根据一张图纸,可以盖出任意数量的房子,而这些房子都有一样的特征。
4. 答:方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写
Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽”了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。Overloaded的方法是可以改变返回值的类型。
5. 答:【编程分析】本题主要考察类的继承问题。
第一步:定义Person类。
第二步:定义Student类,该类继承Person类。 第三步:定义主类。 【参考程序】
public class Java05_01 {
public static void main(String[] args) { Student s1=new Student(\"Zhangsan\ Student s2=new Student(\"Lisi\ s1.show(); s1.showID(); s2.show(); s2.showID();
} }
class Person{ String name; String sex; int age; public Person(String n,String s,int a){ name = n; sex = s; age = a; } void show(){ System.out.println(\"name: \"+name); System.out.println(\"sex: \"+sex); System.out.println(\"age: \"+age); } }
class Student extends Person{ String sID; public Student(String n,String s,int a,String sid){ super(n,s,a); sID = sid; } void showID(){ System.out.println(\"sID: \"+sID); } }
【运行结果】 name: Zhangsan sex: Male age: 20 sID: 102A name: Lisi sex: Female age: 18 sID: 108S