计算机等级二级考试辅导面向对象单元题

2023-3-19 来源:不详 浏览次数:

1、在下列所给出的各种形式的重载定义中,哪一种定义方式是正确的()

(1)intadd(intx,inty);

intadd(intx,inty,intz);

(2)intadd(inta,intb);

intadd(intx,inty);

(3)intadd(intx,inty);

voidadd(inta,intb);

(4)intadd(intx,inty);

voidadd(inty,intx);

解答:

Java语言中的成员方法的重载定义是指在程序类体中以“同名”而“不同形参定义”的成员方法,从而允许相关的方法(功能类似)可以使用同一个名字来访问。

因此,重载方法的基本要求是“同名”而“不同形参定义(在个数或者类型方面有不同)”。比如,如下示例图所示的示例中的各组方法都不是重载方法,而是重复定义的方法。

选项“(1)”中的两个方法在参数的定义方面存在参数的个数不同,而且方法的名称也是同名的。因此,同时满足方法的重载定义的两个基本的条件要求,故属于重载定义的方法。

选项“(2)”中的两个方法在参数的定义方面存在参数的个数相同、对应参数的数据类型也相同,尽管方法的名称相同,但仍然由于不满足方法的重载定义的两个基本的要求。因此,不属于重载定义的方法,方法参数的名称不同不是判断的依据。

选项“(3)”中的两个方法在参数的定义方面存在参数的个数相同、对应参数的数据类型也相同,尽管方法的名称相同,但仍然由于不满足方法的重载定义的两个基本的要求。因此,不属于重载定义的方法,方法参数的名称不同和方法的返回值类型不同都不是判断的依据。

选项“(4)”中的两个方法在参数的定义方面存在参数的个数相同、对应参数的数据类型也相同,尽管方法的名称相同,但仍然由于不满足方法的重载定义的两个基本的要求。因此,不属于重载定义的方法,方法的返回值类型不同不是判断的依据。

因此,本题的答案是“(1)”,因为选项“(1)”中的两个方法在参数的定义方面存在参数的个数不同,而且方法的名称也是同名的。

2、下列给出各种形式的Java程序类中的成员方法的重写定义形式,哪种定义形式是错误的()

解答:

在继承派生的子类定义体中,可以对基类中的成员方法加以重写定义,即在派生类中定义出与基类的“方法原型”相同(返回值、方法名称和方法参数定义三者都相同)、但方法的功能实现不同(方法体不同)的成员方法。

在面向对象的程序设计方法中,方法的重写定义其实是给派生类提供覆盖(替换)基类中的成员方法的一种手段,当基类中的某些成员方法不再适合派生类的需要时,在派生类中应重写出自己的成员方法;此外,方法的重写定义也是实现“多态”编程的必要条件。

如下示例图所示的Chinese类中的talkWith方法是对基类Person类中的talkWith方法(可以为抽象方法)的“重写定义”的方法。

但读者需要注意继承与派生时的方法重写的权限要求,重写的方法访问权限不能有比基类更严格的访问权限(参看如下示例图所示的第1个程序示例)和定义出更多的例外(参看如下示例图所示的第2个程序示例)。

选项“(1)”所示的派生类中的fun方法与基类中的fun方法满足方法“重写定义”的“方法原型”相同的条件,因此这两个方法属于方法“重写定义”的方法,程序也不会出现语法错误。

选项“(2)”所示的派生类中的fun方法与基类中的fun方法,由于在参数的定义方面存在有差别,不满足方法“重写定义”的“方法原型”相同的条件,因此这两个方法尽管不属于方法“重写定义”的方法,但程序也不会出现语法错误。

选项“(3)”所示的派生类中的fun方法与基类中的fun方法,由于在派生类中的方法定义有更严格的访问权限(private),不满足方法“重写定义”的“方法原型”相同的条件,因此这两个方法也不属于方法“重写定义”的方法,但程序会出现语法错误。

选项“(4)”所示的派生类中的fun方法与基类中的fun方法满足方法“重写定义”的“方法原型”相同的条件,因此这两个方法属于方法“重写定义”的方法,程序也不会出现语法错误。

因此,本题的答案是“(3)”,因为选项“(3)”中的派生类的fun方法试图与基类中的fun方法产生方法“重写定义”。但由于在派生类的fun方法中访问权限(private)比基类中的fun方法中访问权限(public)更严格,不满足方法“重写定义”的“方法原型”相同的条件。

3、在下面给出的各种形式的接口定义中,哪一种定义形式是错误的()

解答:

Java语言中的接口是指一组只有成员方法原型定义而无成员方法定义体的方法集,接口定义了一组成员方法,但没有具体加以实现,其实现则是由实现该接口的类来加以具体完成的。面向对象程序设计方法中之所以提供接口的主要目的如下:

1)为若干个类(相关或无关的类)定义一组相同的功能行为,从而达到相同的功能名称但不同的功能实现之目的(实现动态多态);

2)可以实现类似C++语言中的多重继承的效果但又避免了虚基类的编程实现的复杂性。

接口在定义格式方面类似于类的定义格式,只是以interface作为定义符。但还有如下的定义要求:

1)接口中可以定义成员属性,但必须要对它初始化赋值(参看如下示例图所示的错误提示信息);

2)接口中的所有成员(包括成员属性)都必须为public类型的成员(参看如下示例图所示的错误提示信息);

3)接口中的所有成员方法必须为抽象方法,不能有方法体(参看如下示例图所示的错误提示信息)。

选项“(1)”所示的接口定义体的成员属性已经对它初始化赋值,尽管没有定义为public类型,默认则为public类型的成员定义;而且其中的成员方法也为抽象方法和public类型。因此,符合和满足接口定义的语法规则,是正确的接口定义。

选项“(2)”所示的接口定义体与选项“(1)”所示的接口定义体的差别在于方法没有加abstract修饰,默认则为abstract成员方法。因此,同样也符合和满足接口定义的语法规则,也是正确的接口定义。

选项“(3)”所示的接口定义体中由于存在有private类型的成员定义,这不符合和满足接口定义的语法规则,属于错误的接口定义。

选项“(4)”所示的接口定义体中的两个abstract类型的myfm方法形成重载定义,这些成员定义都满足接口定义的语法规则,,是正确的接口定义。

因此,本题的答案是“(3)”,因为选项“(3)”存在有private类型的成员定义,但接口中的所有成员必须要为public类型定义。

4、下列给出各种形式的Java程序中的接口定义,哪种定义形式是错误的()

解答:

本问题与前面的问题基本一致,其中错误的接口是选项“(3)”所示的接口定义体,因为其中的成员属性没有对它初始化赋值。因此,本题的答案是“(3)”。

5、欲将C/C++语言中定义的intx=1移植到Java语言程序中,但仍要求保持为16位数据长度,应选择下面的哪一种声明方式()(1)intx=1;(2)shortx=1;(3)longintx=1;(4)bytex=1;

解答:

Java语言中的基本数据类型的变量在数据长度(所占用的字节数)方面与C/C++语言存在有一定的差别,比如在Java语言中的int整形数据不再是C/C++语言中的16位(两个字节),而是32为(四个字节)。如下示例图所示的数据长度为Java语言中的几种基本数据类型的长度说明。其中长度为16位的是char字符数据类型和short短整形数据类型。

因此,欲将C/C++语言中定义的intx=1移植到Java语言程序中,但仍要求保持为16位数据长度,此时将不能再在Java程序中以int类型方式出现,而必须修改为short短整形数据类型。因此,本题的答案是“(2)”。6、设myCircle为Circle程序类的对象实例,并且myCircle=newCircle(10,10,);则如下的表达式:myCircleinstanceofCircle的表达式值为()(1)false(2)ture(3)null(4)0

解答:

在Java语言中新增instanceof(关系运算符):它的主要功能是识别某对象是否为某类的对象实例。既然是关系运算符,其表达式的结果值只能是Java语言中的布尔类型的值——true或者false。

由于本题中已经明确地说明myCircle为Circle程序类的对象实例,则myCircleinstanceofCircle的表达式判断的结果为“真”,当然其结果值为true。因此,本题的答案是“(2)”。

7、下列给出各种形式的Java程序中的接口定义,哪种定义形式是错误的()

解答:

本题与前面的题3和题4都属于同类型的问题,都涉及到考察接口定义的语法规则相关的知识。本题的答案是“(3)”,因为其中的方法myFun给出了方法的定义体,但接口中的方法必须为抽象方法,不能有方法的具体功能实现。

8、给定名称为Point的程序类的定义体

classPoint{

privateintx,y;

publicPoint(intx,inty){

this.x=x;

this.y=y;

}

}

其中的this代表下面的哪一项()

(1)类名Point

(2)父类的对象

(3)Point类的当前对象

(4)this指针

解答:

在Java程序中的继承与派生类的定义及编程应用中,经常会涉及到this和super的应用。this和super它们都是Java语言中的保留字,但有如下的两种不同形式的功能。

(1)使用方式之一,它们都作为构造方法来使用

1)super(参数):调用基类中的某一个构造函数(应该为构造函数中的第一条语句)。

2)this(参数):调用本类中另一种形成的构造函数(应该为构造函数中的第一条语句)

(2)使用方式之二,它们都作为对象来使用

1)super:它引用当前对象的直接父类的对象(用来访问直接父类中被隐藏的父类中成员数据或函数,基类与派生类中有相同成员定义时)。

2)this:它代表当前对象名。其主要的用途:在程序中易产生二义性之处,应使用this来指明当前对象;如果函数的形参与类中的成员数据同名,这时需用this来指明成员变量名。

如下示例图所示的程序代码示例说明了this和super的各种用法示例。

由于本问题中的Point类没有定义出基类、同时也没有派生出子类。因此,在构造方法中的this代表当前对象名,也就是“Point类的当前对象”。因此,本题的答案是“(3)”。另外,在Java语言中不再提供有如C/C++语言中的指针数据类型,因此不存在“this指针”的概念——选项(4)是错误的。

9、下列给出各种形式的Java程序中的派生类的定义,哪一种定义形式是正确的()

(1)classmyDrivedextendsBase{}

(2)classmyDrived:publicBase{}

(3)classmyDrived:extendsBase{}

(4)classmyDrivedextendspublicBase{}

解答:

Java语言中的派生类在定义时,需要应用“extends”定义符指明所继承的基类名称。派生类的定义语法参看如下示例图所示的类定义模板。

因此,本题的答案是“(1)”,其它定义形式都不符合Java语言中的派生类的定义语法,都是错误的定义。

10、关于被私有和保护访问控制符private、protected修饰的成员变量,以下说法正确的是哪一项()

(1)可以被三种类所引用:该类自身、与它在同一个包中的其他类、在其他包中的该类的子类

(2)可以被两种类访问和引用:该类本身、该类的所有子类

(3)只能被该类自身所访问和修改

(4)只能被同一个包中的类访问

解答:

在Java程序类中可以根据应用的需要对类中的成员(属性和方法)给定不同的访问控制选项,它们可以是public、protected、private和默认未给定四种形式。其中任何声明为public类型的成员可以被从任何地方访问,而如果希望一个成员在当前程序包外可见,但仅仅是成员所在类的子类直接可见,可以把该成员定义成protected访问控制;被声明成private类型的成员不能被该类外程序所访问;而如果一个成员不含有一个明确的访问说明(这是默认的访问控制),它对于子类或该包中的其他类是可见的。

如下示例图所示的访问状况为类定义体中的成员访问控制选项分别为public、protected、private和默认未给定(图中由friendly表示)四种形式时的访问规则示例。

本问题中的成员为private和protected类型的访问控制选项,因此,本题的答案是“(3)”,只能被该类自身所访问和修改。

11、以下程序代码段在执行后,将创建出几个对象()

Stringstr1=bc;

Stringstr2=bc;

(1)0

(2)1

(3)2

(4)3

解答:

在Java程序中定义一个字符串(String)类型的对象实例可以采用如下的两种不同形式的创建方式,但它们存在有一定的差别。

(1)直接让String对象等于一个字符串

比如,Stringstr1=bc;形式的语句创建字符串(String)类型的对象实例str1,Java虚拟机会在内存中查找是否已经有bc这个字符串,如果没有则在这个内存区域创建一个bc字符串,并对bc字符串的地址以str1的名称加以引用。因此,Stringstr1=bc;语句中只创建出了一个对象实例。

而当再次创建另一个字符串Stringstr2=bc;由于内存中已经有了bc这个字符串,所以str2就直接指向了bc这个地址。此时,str1和str2两个名称的字符串其实都指向bc这个字符串的地址。因此,str1和str2其实是对同一个字符串bc的不同名称的引用,在对象的个数方面仍然是一个对象。因此,如果进行如下的比较判断:str1==str2,得到的结果却是true,这也说明str1和str2是同一个字符串对象。

因此,本题的答案是“(2)”,尽管表面是创建了两个不同名称的字符串对象,但其实仍然是同一个字符串对象的不同名称的引用。

(2)使用new创建一个字符串对象

当采用new创建两个字符串Stringstr1=newString(bc);Stringstr2=newString(bc);由于new创建的对象会分别在内存中创建出两个不同的内存地址,所以str1和str2是两个不同的对象(内存地址不同)。因此,如果进行如下的比较判断:str1==str2,得到的结果却是false,这也说明str1和str2是两个不同的对象。

读者可以参看如下示例图所示的程序代码示例及执行结果,可以深入地了解Java程序中的字符串编程相关知识。但要注意的是,“str1==str2”是判断两个字符串str1和str2的内存地址是否相同。如果要判断两个字符串str1和str2的内容(值)是否相同,则要采用equals()或者equalsIgnoreCase()方法,也就是采用“str1.equalsIgnoreCase(str2)”条件判断表达式。

12、编译并运行以下的Java程序代码,以下哪个描述选项是正确的()

classX{

protectedStringtoString(){

returnsuper.toString();

}

}

(1)编译通过运行无异常

(2)编译通过但运行时出错

(3)第2行(protectedStringtoString())将会出现编译错误,不能成功编译

(4)第3行(returnsuper.toString();)将会出现编译错误,不能成功编译

解答:

JDK系统库中的java.lang.Object类是所有Java程序类的基类,也就是说Java程序中的所有不同的程序类都继承于java.lang.Object类,任何的派生类(也就是在任何的Java程序类中)可以使用java.lang.Object类中的所有方法。当然,也可以对java.lang.Object基类中的方法进行覆盖方式的重写定义以实现特定的应用需要。

java.lang.Object类中提供有publicStringtoString()方法,该方法返回某个对象的字符串表示形式,并且为public类型。当然,toString()方法可以在任何的派生类中进行覆盖方式的重写定义。但根据Java继承关系中的派生类对基类中的方法重写定义的要求之一是方法的访问控制权限不能高于基类中被重写定义的方法。

因此,本题的答案是“(3)”,即第2行(protectedStringtoString())将会出现编译错误,不能成功编译。因为在X类中重写定义的toString()方法的访问控制权限(protected)高于基类中被重写定义的方法的访问控制权限(public)。参看如下示例图所示的本问题的X类的语法检查结果的错误提示。

13、下列给出几种形式的关于Java语言中的各种修饰符混用的说法,其中错误的是哪一项()

(1)abstract不能与final并列修饰同一个类

(2)abstract类中不可以有private的abstract成员方法

(3)abstract方法必须在abstract类中

(4)static方法中能处理非static的属性

解答:

本题的四个选项由于涉及到Java语言的多个不同方面的语法规则,作者对每个选项分别进行解释说明。

选项“(1)”涉及abstract和final两个定义符的应用。abstract定义抽象类,该类是需要被继承的。而final定义的类是中止类,不能再被继承。因此abstract和final两个定义符不能并列修饰同一个类,选项“(1)”是正确的,参看如下示例图所示的错误提示信息。

选项“(2)”涉及抽象类中的成员方法定义的要求,由于抽象类中的抽象方法是需要在派生类中被重写定义的。因此,抽象方法不能被定义为private类型的方法。选项“(2)”是正确的,参看如下示例图所示的错误提示信息。

选项“(3)”涉及抽象方法的应用场合方面的问题,在面向对象程序设计方法中,抽象方法可以出现在抽象类和接口(接口其实是一种特殊的抽象类,所有的方法都是抽象方法)中。因此,选项“(3)”也是正确的(但不太严谨!),参看如下示例图所示的错误提示信息。

选项“(4)”涉及在static方法中如何访问static类型和非static类型(普通)成员的相关知识。static方法由于属于类的方法而不是某个对象所特有的方法,而普通的成员是对象所特有的成员。因此,在static方法中只能访问static类型的成员,不能访问或者处理非static类型(普通)成员。参看如下示例图所示的错误提示信息,如果需要访问,则必须要通过对象来访问。因此,本题的答案是“(4)”。

14、main()方法是JavaApplication应用程序在执行时的入口点,下面给出各种形式的main()方法的定义,哪一项是正确的定义形式()

(1)publicstaticvoidmain()

(2)publicstaticvoidmain(String[]args)

(3)publicstaticintmain(String[]arg)

(4)publicvoidmain(Stringarg[])

解答:

Java程序中的main()方法的原型定义如下:publicstaticvoidmain(String[]args),参看如下示例图所示的main()方法的原型定义。因此,本题的答案是“(2)”,其它选项所示的main()方法的定义形式都是错误的。

15、执行完以下程序代码int[]x=newint[25];后,以下哪一项说明是正确的()

(1)x[24]的值为0

(2)x[24]未定义

(3)x[25]的值为0

(4)x[0]的值为空

解答:

本题涉及Java程序中的数组元素及数组在对象实例化后的元素默认值等问题。首先,数组中的元素在访问中通过该元素的序号(0到数组元素个数减1);其次,数组在对象实例化后的元素默认值其实就是该数组类型所对应的数据类型的默认值。比如,byte,short,int,long型的数组元素的默认值为0。

选项“(1)”是正确的,x[24]的值为0。选项“(2)”是错误的,x[24]并不是没有定义,只是没有设置其初始值。选项“(3)”也是错误的,x[25]由于元素的序号超出了访问的范围,会抛出数组越界的异常。选项“(4)”也是错误的,x[0]的值为0(默认值),并不是为空。因此,本题的答案是“(1)”。

16、以下程序代码段在执行后的输出结果为()

intx=3;inty=10;

System.out.println(y%x);

(1)0

(2)1

(3)2

(4)3

解答:

Java程序中的“%”是“取余数”的操作符,10/3的余数为1。因此,本题的答案是“(2)”。

17、下列给出各种形式的语句,其中哪个语句是错误的()

(1)Stringx=Hello;inty=9;x+=y;

(2)Stringx=Hello;inty=9;if(x==y){}

(3)Stringx=Hello;inty=9;x=x+y;

(4)Stringx=null;inty=(x!=null)(x.length()0)?x.length():0;

解答:

在Java程序中字符串可以和int整数等类型的变量进行“+”(连接)操作,但此时将不是进行数据值的累加,而是串接。比如,选项“(1)”的执行结果x是“Hello9”,选项“(3)”的结果也为此值。但选项“(2)”会出现语法错误,因为比较判断“==”运算符的两边必须是相同类型。因此,字符串不能和int类型的变量进行比较,参看如下示例图所示的错误提示信息。

选项“(4)”的源程序在编译时不会出现语法检查方面的错误,但实际执行时将会抛出java.lang.NullPointerException类型的空指针异常。由于Stringx=null;因此x.length()方法在执行时将抛出空指针异常。因此,本题的答案是“(2)”。

18、下列给出各种形式的定义语句,其中声明合法的是哪一项()

(1)defaultStringstr;

(2)publicfinalstaticnativeintsomeOneMethod()

(3)abstractdoubleval;

(4)abstractfinaldoublesomeTwoMethod()

解答:

在Java语言中没有缺省值定义,也就是default不是Java语言中的定义符。因此,选项“(1)”是错误的;abstract只能用于修饰方法,形成抽象方法,不能用于说明属性。因此,选项“(3)”也是错误的;abstract和final不能同时使用于一个方法,否则会产生矛盾。因此,选项“(4)”也是错误的;在选项“(2)”中,一个方法可以是final和static,并且也还可以是native,因此,选项“(2)”是正确的。

因此,本题的答案是“(2)”。

19、下面示例图中给出一段程序代码示例,对此程序代码片段说明是正确的是下面的哪一项()

(1)第6行不能通过编译,因为引用了私有静态变量

(2)第11行不能通过编译,因为val是私有静态变量

(3)程序通过编译,输出结果为:变量val的值为:

(4)程序通过编译,输出结果为:变量val的值为:

解答:

读者要理解本问题,需要了解如下与static方法相关的访问知识。首先,在Java程序中的静态方法中可以直接调用同类中的静态成员(属性和方法,并且不受访问控制限制,也就是可以访问private类型的成员);其次,访问的形式可以是直接访问,也可以通过某个对象名来访问。

由于main()方法为static类型的方法,因此在main()方法中也可以直接访问本类(在本问题中指SomeOneStaticClass类)中的成员属性val,尽管val为private类型的成员属性,这就像在类的成员方法可以直接访问类中的private类型的成员属性一样。

在main()方法中访问成员属性val,可以采用类名SomeOneStaticClass限定(形如:SomeOneStaticClass.val),也可以采用对象名限定(形如:oneObject.val)等形式进行访问。

因此,选项“(1)”是错误的,能够正常编译通过,可以访问private类型的成员属性;选项“(2)”也是错误的,同样能够正常编译通过,通过类名SomeOneStaticClass限定的形式访问。

选项“(3)”也是错误的,因为已经加了3次1,然后再减少1,其结果应该为。因此,本题的答案是“(4)”,参看如下示例图所示的执行结果。

20、在以下各种形式的标识符中,哪一项是不合法的标识符()

(1)BigMeaninglessName

(2)$int

(3)1st

(4)$1

解答:

Java语言中的标识符可由任意顺序的字母、下划线(_)、美元符号($)和数字组成,并且第一个字符不能是数字;同时,标识符不能是Java中的保留关键字。因此,选项“(3)”是错误的,因为该标识符的第一个字符是数字。故本题的答案是“(3)”。

21、给出如下示例图所示的程序代码示例,下列哪一项说明是正确的()

(1)第5行与第11行不能通过编译,因为缺少方法名和返回类型  

(2)第11行不能通过编译,因为只能有一个静态初始化器

(3)编译通过,执行结果为:someOneVal=5

(4)编译通过,执行结果为:someOneVal=3

解答:

static语句块也就是形如static{}的代码块,static语句块会在类被加载的时候执行且仅会被执行一次。static语句块的主要应用是用来初始化静态变量和调用静态方法。此外,由于在Java虚拟机的生命周期中一个类只被加载一次,又因为static语句块是伴随着所在的类加载执行的,所以不管创建出该类的多少次对象实例,static语句块都会被执行且只执行一次。

在同一个类中允许出现多个static语句块,执行的顺序是按照static语句块的顺序执行。因此,选项“(1)”是错误的,因为是static语句块,不需要反复名和返回类型说明;选项“(2)”也是错误的,允许出现多个static语句块。

由于变量someOneVal的初始值为10,先累加了5,结果为15,再执行除以3,结果当然为5。因此,选项“(3)”是正确的,选项“(4)”是错误的。故本题的答案是“(3)”,参看如下示例图所示的执行结果。

22、下列给出各种形式的Java循环代码,其中循环结构是正确的是哪一项()

解答:

本题主要考察对Java循环语句的正确应用相关的知识,首先,选项“(1)”中的“intI7”不是条件表达式,不符合while循环语句的语法规则,因此选项“(1)”错误的;其次,选项“(2)”中的“j”也不是条件表达式,因此选项“(2)”也是错误的;再其次,选项“(3)”中的for循环语句没有语法问题,因此选项“(3)”是正确的;最后,选项“(4)”也是错误的,因为其中的“continueloop”语句中的标签loop在程序中没有定义,因此选项“(4)”也是错误的。

因此,本题的答案是“(3)”。

23、给定某个名称为SomeOneClass的程序类定义如下

1.publicclassSomeOneClass{

2.    publicfloatsomeOneMethod(floatx,floaty){}

3.    

4.}  

现欲将下面的someOneMethod方法插入到第3行所在的位置处形成SomeOneClass类的成员方法定义,哪一项是错误的()

(1)publicfloatsomeOneMethod(floatx,floaty,floatz){}

(2)publicfloatsomeOneMethod(floata,floatb){}

(3)publicintsomeOneMethod(intx,inty){}

(4)privatefloatsomeOneMethod(intx,inty,intz){}

解答:

由于在SomeOneClass类中已经定义有一个名称为someOneMethod的,如果再在此类中再增加一个名称也为someOneMethod的方法,则形成重载方法。因此,在第3行插入的新方法必须要与原来的someOneMethod方法形成重载方法定义,也就必须要满足重载方法定义的要求——“方法同名”但方法的“参数定义不同”。

选项“(1)”中的someOneMethod方法由于带有三个参数定义,因此能够形成重载方法定义,选项“(1)”是正确的;选项“(2)”中的someOneMethod方法的参数在个数和对应的参数数据类型两个方面都与原来的someOneMethod方法相同,因此无法形成重载方法定义,故选项“(2)”是错误的。

选项“(3)”中的someOneMethod方法尽管也是两个参数,但这两个参数的数据类型与原来的someOneMethod方法不相同,因此能够形成重载方法定义,故选项“(3)”是正确的;选项“(4)”中的someOneMethod方法由于带有三个参数定义,而且这三个参数的数据类型与原来的someOneMethod方法不相同,因此能够形成重载方法定义,故选项“(4)”是正确的。

因此,本题的答案是“(2)”。

24、给定程序类SomeOneClass、SomeTwoClass定义如下

1.publicclassSomeOneClass{

2.    publicfloatsomeOneMethod(floatx,floaty)throwsIOException{

3.    }

4.}

5.publicclassSomeTwoClassextendsSomeOneClass{

6.

7.}

现欲将下面的someOneMethod方法插入到第6行所在的位置处形成SomeTwoClass程序类的成员方法定义,哪一项是错误的()

(1)floatsomeOneMethod(floatx,floaty){}

(2)publicintsomeOneMethod(intx,inty)throwsException

(3)publicfloatsomeOneMethod(floata,floatb){}

(4)publicintsomeOneMethod(intm,intn)throwsIOException{}

解答:

本题主要考察对继承派生关系中的派生类中的成员方法如何覆盖基类中的同名方法相关的知识,派生类中的成员方法要覆盖基类的同名方法,则方法的“原型定义”必须要与基类中被覆盖的方法有“相同的原型定义”,而且不能有更严格的访问控制选项和更多的异常抛出声明。

选项“(1)”中someOneMethod方法尽管在方法返回类型定义、方法名称和方法参数定义三个方面都与基类中的被覆盖的同名someOneMethod方法相同,但方法的访问控制选项却比基类中的被覆盖方法更严格。因此,不符合“原型定义”相同的要求。因此,选项“(1)”是错误的;选项“(2)”中的someOneMethod方法由于在返回类型定义、参数定义等方面与基类中的被覆盖的同名someOneMethod方法不相同,因此不满足方法覆盖定义的要求,因此选项“(2)”中的someOneMethod方法不能覆盖基类中的同名someOneMethod方法,但可以形成重载定义。故选项“(2)”没有错误。

选项“(3)”中someOneMethod方法与基类中的被覆盖的同名someOneMethod方法有相同的“原型定义”,而且有更少的异常抛出定义。因此,选项“(3)”是正确的;选项“(4)”中的someOneMethod方法与基类中的被覆盖的同名someOneMethod方法不相同,因此不满足方法覆盖定义的要求,因此选项“(4)”中的someOneMethod方法不能覆盖基类中的同名someOneMethod方法,但可以形成重载定义。故选项“(4)”没有错误。

因此,本题的答案是“(1)”。

25、给定如下的程序代码片段,其中正确的说法是哪一项()

1.Stringstr1=abc+def;

2.Stringstr2=newString(str1);

3.if(str1==str2)

4.System.out.println(==成功);

5.if(str1.equals(str2))

6.System.out.println(.equals()成功);

(1)第4行和第6行的打印输出语句都将会执行

(2)第4行打印输出语句执行,但第6行的打印输出语句不执行

(3)第6行打印输出语句执行,但第4行的打印输出语句不执行

(4)第4行和第6行的打印输出语句都不执行

解答:

涉及Java字符串的比较判断主要涉及两个不同的应用要求,“字符串1==字符串2”的条件表达式是比较两个字符串的地址是否相同;而“字符串1.equals(字符串2)”判断的目标是两个字符串的内容是否相同。

本题中的str1和str2是两个不同的字符串,因此“str1==str2”是判断两个字符串的存储地址是否相同,当然是不相同。“str1==str2”表达式的值为false;“str1.equals(str2)”表达式是判断两个字符串的内容是否相同。根据题意,str1和str2两个字符串的内容是相同的。因此,;“str1.equals(str2)”表达式的值为true。

选项“(1)”是错误的,第4行代码不会被执行,但第6行代码则会被执行;选项“(2)”是错误的;选项“(3)”是正确的,选项“(4)”是错误的。

因此,本题的答案是“(3)”。

26、编译并运行以下的程序代码(命令形式为:javaSomeOneClass1),并给出几种对其中的运行结果的描述选项,正确的描述选项是哪一项()

(1)编译出错

(2)打印出“0”

(3)打印出“1”

(4)打印出“default”

解答:

Java语言中的switch语句的语法规则定义如下示例图所示,其中的条件判断是“条件表达式”,其结果的值必须是布尔类型的结果true和false。

但本题中的switch(i)中的i并不是“条件表达式”,而是一个long类型的数据值,不符合switch语句的语法规则。因此,本题中的程序代码将会出现编译错误。故本题的答案是“(1)”。

计算机等级二级考试辅导:“面向对象”单元题解答(第2部分)

计算机等级二级考试辅导:“面向对象”单元题解答(第1部分)

计算机等级二Java考试辅导:“面向对象”单元练习题(第3部分)

计算机等级二Java考试辅导:“面向对象”单元练习题(第2部分)

计算机等级二Java考试辅导:“面向对象”单元练习题(第1部分)

转载请注明:
http://www.wanruiguanye.com/bzcs/77435554.html
  • 上一篇文章:

  • 下一篇文章:
  • 网站首页 版权信息 发布优势 合作伙伴 隐私保护 服务条款 网站地图 网站简介

    温馨提示:本站信息不能作为诊断和医疗依据
    版权所有 2014-2024
    今天是: