JAVA考核题面向对象选择题答案_第1页
JAVA考核题面向对象选择题答案_第2页
JAVA考核题面向对象选择题答案_第3页
JAVA考核题面向对象选择题答案_第4页
JAVA考核题面向对象选择题答案_第5页
已阅读5页,还剩33页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第页北润JAVA考核-面向对象第一部分英语测试(每题分,共分)第二部分知识点测试(分)一、选择题(每题2分,共110分)1.下面关于变量及其作用范围的陈述哪个是不对的?(B)A.实例变量是类的成员变量。B.实例变量用关键字static声明。C.在方法中定义的局部变量在该方法被执行时创建。D.局部变量在使用前必须被初始化。2.下面哪条语句把方法声明为抽象的公共方法?(B)A.publicabstractmethod(); B.publicabstractvoidmethod();C.publicabstractvoidmethod(){} D.publicvoidmethod()extendsabstract;3.若在某一个类定义中定义有如下的方法:finalvoidaFinalFunction(){}则该方法属于(C)。A、本地方法B、静态方法 C、最终方法D、抽象方法4.main方法是JavaApplication程序执行的入口点,关于main方法的方法头以下哪项是合法的(B)。A、publicstaticvoidmain() B、publicstaticvoidmain(String[]args)C、publicstaticintmain(String[]args) D、publicvoidmain(Stringarg[])5.在Java中,一个类可同时定义许多同名的方法,这些方法的形式参数个数、类型或顺序各不相同,传回的值也可以不相同。这种面向对象程序的特性称为(C)。A、隐藏B、覆盖C、重载D、Java不支持此特性6.下列关于构造方法的叙述中,错误的是(C)A.Java语言规定构造方法名及类名必须相同B.Java语言规定构造方法没有返回值,但不用void声明C.Java语言规定构造方法不可以重载D.Java语言规定构造方法只能通过new自动调用7.关于被私有访问控制符private修饰的成员变量,以下说法正确的是(C)A.可以被三种类所引用:该类自身、及它在同一个包中的其他类、在其他包中的该类的子类B.可以被两种类访问和引用:该类本身、该类的所有子类C.只能被该类自身所访问和修改D.只能被同一个包中的类访问8.类Test1定义如下:1.publicclassTest1{2. publicfloataMethod(floata,floatb){}3. 4.} 将以下哪种方法插入行3是不合法的。(B)A、publicfloataMethod(floata,floatb,floatc){}B、publicfloataMethod(floatc,floatd){}C、publicintaMethod(inta,intb){}D、privatefloataMethod(inta,intb,intc){}9.阅读以下代码:publicclassfoo{publicstaticvoidmain(String[]args){Strings;System.out.println("s="+s); 输出结果应该是:(C

)A.代码得到编译,并输出“s=”B.代码得到编译,并输出“s=null”C.由于Strings没有初始化,代码不能编译通过D.代码得到编译,但捕获NullPointException异常解析:局部变量必须显示的初始化。引用类型变量初始化时如果没有具体对象引用,可以初始化为null。10.下述概念中不属于面向对象这种编程范畴的是(D)。A.对象、消息

B.继承、多态C.类、封装

D.过程调用11.编译并运行以下程序,以下描述哪个选项是正确的(A)。1.classA{ 2. protectedStringtoString(){ 3. returnsuper.toString();} 4. }A、行2出错,不能成功编译 B、编译通过但运行时出错C、编译通过运行无异常 D、不能成功编译,行3出错解析:方法重写时没有满足访问权限控制符要比父类的大或者相同。12.假设Foo类有如下定义,设f是Foo类的一个实例,下列语句调用哪个是错误的?(A) publicclassFoointi; staticStrings; voidimethod(){} staticvoidsmethod(){}A、Foo.imethod(); B、f.imethod(); C、System.out.println(f.i); D、Foo.smethod()13.以下哪个接口的定义是正确的?(D)A、interfaceA{voidprint(){};}B、abstractinterfaceA{voidprint();}C、abstractinterfaceAextendsI1,I2//I1、I2为已定义的接口{abstractvoidprint(){};}D、interfaceA{voidprint();}解析:接口定义时语法规定上是不需要加abstract的,因为接口本身就是abstract的,java编译器在编译接口时会自动加上abstract。但是我们显示的加上abstract是不会出现问题,不建议加。此处选项B和C可以认为不正确。14.关于以下程序段,正确的说法是(C)1.

String

s1=“a”+“b”;

2.

String

s2=new

String(s1);

3.

if(s1==s2)

4.

System.out.println(“==

issucceeded”);

5.

if(s1.equals(s2))

6.

System.out.println(“.equals()issucceeded”);A.行4及行6都将执行

B.行4执行,行6不执行

C.行6执行,行4不执行

D.行4、行6都不执行15.下面程序运行结果为:(D,如果输出count则为A)publicclasstest3{publicstaticvoidmain(Stringargs[]){intcount=0;for(inti=0;i<=100;i++)count+=count++;A0B7C编译有错误D其他答案16.下面哪个函数是public

void

aMethod(){...}的重载函数?(D)A、void

aMethod(

){...}B、public

int

aMethod(){...}C、public

void

aMethod(){...}D、public

int

aMethod

(

int

m){...}17.下面关于继承的哪些叙述是正确的?(D)A.在java中允许多继承。B.

在java中一个类只能实现一个接口。C.

在java中一个类不能同时继承一个类和实现一个接口。D.

java的单一继承使代码更可靠。18.运行下面程序段的结果是:(D)。publicclassMyMain{publicstaticvoidmain(Stringargs){System.out.println(“HelloJava”);A.正常输出HelloJavaB.编译时出错C.运行时出错D.以上答案都不对19.类及对象的关系是(A)。A.类是对象的抽象 B.类是对象的具体实例C.对象是类的抽象 D.对象是类的子类20.下列关于修饰符混用的说法,错误的是(BD)。A.abstract不能及final并列修饰同一个类B.abstract类中不可以有private的成员C.abstract方法必须在abstract类中D.static方法中能处理非static的属性解析:abstract类中可以有private的成员,只是它的private成员不能被继承,所以在abstract类中定义private成员没有意义。21.编译并运行下述程序段的结果是:(B)。publicclassTest{publicstaticvoidmain(Stringargv[]){int[]count=newint[4];System.out.println(count[4]);A.编译时错误 B.运行时错误C.输出0 D.输出null22.下面是有关子类继承父类构造函数的描述,其中正确的是(CD)。A.创建子类的对象时,先调用子类自己的构造函数,然后调用父类的构造函数。B.子类无条件地继承父类不含参数的构造函数。C.子类必须通过super关键字调用父类的构造函数。D.子类无法继承父类的构造函数。解析:子类无法继承父类的构造器,但有时候可以使用super调用父类构造器中的初始化代码。在继承关系中一定要确保构造器的上溯链不得中断,否则会出错。23.下列类的定义中,错误的是(B)。A.classx{}B.publicxextendsy{}C.publicclassxextendsy{}D.classxextendsyimplementsy1{}24.A派生出子类B

,B派生出子类C,并且在Java源代码中有如下声明:1. A a0=newA();2. A a1=newB();3. A a2=newC();问以下哪个说法是正确的?(D)A.只有第1行能通过编译B.第1、2行能通过编译,但第3行编译出错C.第1、2、3行能通过编译,但第2、3行运行时出错D.第1行、第2行和第3行的声明都是正确的25.运行下列程序的结果是(C)abstractclassMineBase{ abstractvoidamethod(); staticinti;publicclassMineextendsMineBase{ publicstaticvoidmain(Stringargv[]){ int[]ar=newint[5]; for(i=0;i<ar.length;i++){ System.out.println(ar[i]);A.打印5个0B.编译出错,数组ar[]必须初始化C.编译出错,Mine应声明为abstractD.出现IndexOutOfBoundes的例外26.编译并运行以下程序段的结果是:(A)publicclassMyClass{finalstaticinti;MyClass(){i=0;}publicstaticvoidmain(Stringargs[]){System.out.println(i);A.编译出错 B.null C.1 D.0解析:final修饰的成员变量(静态成员原理和实例成员变量)必须显示初始化。静态成员变量可以在声明时或静态初始化代码块显示初始化;实例成员变量可以在声明时、初始化代码块或构造器中显示初始化。27.下面方法中的“返回类型Type”应该是什么?(A)publicclassReturnIt{returnTypemethodA(bytex,doubley){return(short)x/y*2;A.double B.int C.byte D.short28.下面哪个修饰符修饰的变量是所有同一个类生成的对象共享的?(C)A、public B、private C、static D、final29.下面关于java中类的说法哪个是不正确的?(AC)A.类体中只能有变量定义和成员方法的定义,不能有其他语句。B.构造函数是类中的特殊方法。C.类一定要声明为public的,才可以执行。D.一个java文件中可以有多个class定义。30.下列哪个类声明是正确的?(D)A.abstractfinalclassH1{…}B.abstractprivatemove(){…}C.protectedprivatenumber;D.publicabstractclassCar{…}31.方法重载是指(A)A.两个或两个以上的方法取相同的方法名,但形参的个数或类型不同B.两个以上的方法取相同的名字和具有相同的参数个数,但形参的类型可以不同C.两个以上的方法名字不同,但形参的个数或类型相同D.两个以上的方法取相同的方法名,并且方法的返回类型相同32.指出下列程序运行的结果(B)publicclassExample{Stringstr=newString("good");char[]ch={'a','b','c'};publicstaticvoidmain(Stringargs[]){Exampleex=newExample();ex.change(ex.str,ex.ch);System.out.print(ex.str+"and");Sytem.out.print(ex.ch);publicvoidchange(Stringstr,charch[]){str="testok";ch[0]='g';A.goodandabc B.goodandgbcC.testokandabc D.testokandgbc33.下列哪些语句关于内存回收的说明是正确的?(B)A.程序员必须创建一个线程来释放内存B.内存回收程序负责释放无用内存C.内存回收程序允许程序员直接释放内存D.内存回收程序可以在指定的时间释放内存对象34.MAX_LENGTH是int型public成员变量,变量值保持为常量100,用简短语句定义这个变量。(CD)A、publicintMAX_LENGTH=100;B、finalintMAX_LENGTH=100;C、finalpublicintMAX_LENGTH=100;D、publicfinalintMAX_LENGTH=100;

35.给出下面代码:1)classParent{

2}privateStringname;

3}publicParent(){}

4}}

5)publicclassChildextendsParent{

6}privateStringdepartment;

7}publicChild(){}

8}publicStringgetValue(){returnname;}

9}publicstaticvoidmain(Stringarg[]){

10}Parentp=newParent();

11}}

12}}那些行将引起错误?(D)A、第3行 B、第6行 C、第7行 D、第8行

36.类Teacher和Student是类Person的子类;Personp;

Teachert;

Students;

//p,tandsareallnon-null.

if(tinstanceofPerson){s=(Student)t;}最后一句语句的结果是:(B)A、将构造一个Student对象; B、表达式是合法的;C、表达式是错误的; D、编译时正确,但运行时错误。 解析:考查instanceof和继承中的强制转换。tinstanceofPerson表达式是正确的。s=(Student)t;这句转换编译是错误的。37.给出下面代码段1)publicclassTest{

2)intm,n;

3)publicTest(){}

4)publicTest(inta){m=a;}

5)publicstaticvoidmain(Stringarg[]){

6)Testt1,t2;

7)intj,k;

8)j=0;k=0;

9)t1=newTest();

10)t2=newTest(j,k);

11)}

12)}

哪行将引起一个编译时错误?(D)A、line3 B、line5 C、line6 D、line10

38.对于下列代码:1)classPerson{

2)publicvoidprintValue(inti,intj){//...}

3)publicvoidprintValue(inti){//...}

4)}

5)publicclassTeacherextendsPerson{

6)publicvoidprintValue(){//...}

7)publicvoidprintValue(inti){//...}

8)publicstaticvoidmain(Stringargs[]){

9) Persont=newTeacher();

10)t.printValue(10);

11)}

第10行语句将调用哪行语句?(D)A、line2 B、line3 C、line6 D、line739.System类在哪个包中?(D)A、java.util B、java.io C、java.awt D、java.lang40.对于下列代码:publicclassParent{

publicintaddValue(inta,intb){

ints;

s=a+b;

returns;

}

}

classChildextendsParent{

}下述哪些方法可以加入类Child?(CD)A、intaddValue(inta,intb){//dosomething...}B、publicvoidaddValue(inta,intb){//dosomething...}C、publicintaddValue(inta){//dosomething...}D、publicintaddValue(inta,intb)throwsMyException{//dosomething...}解析:A选项不符合一大;B选项返回值类型不匹配;C选项为自己的方法;D选项异常更明确。41.看下面一段程序:classAclass{

voidgo(){

System.out.println("Aclass");

}

}

publicclassBclassextendsAclass{

voidgo{

System.out.println("Bclass");

}

publicstaticvoidmain(Stringargs[]){

Aclassa=newAclass();

Aclassa1=newBclass();

a.go();

a1.go();

}以上程序运行结果是:(C)A、AclassAclass B、BclassBclassC、AclassBclass D、BclassAclass42.运行下列程序,会产生什么结果:(B)classOuter1{

privateinta;

voidfoo(doubled,finalfloatf){

Strings;

finalbooleanb;

classInner{

voidmethodInner(){

System.out.println("intheInner");

}

}

}

publicstaticvoidmain(Stringargs[]){

Outer1me=newOuter1();

me.foo(123,123);

System.out.println("outer");

}

}A、intheInnerouter B、outerC、intheInner D、编译不通过43.下面哪个修饰符修饰的方法只能被本类中的其他方法使用(C)A、protected B、static C、private D、public44.下面程序运行后的输出结果为(C)classA{staticinty=3;voidshowy(){System.out.println(“y=”+y);classtestA{ publicstaticvoidmain(Stringaaa[])Aa1=newA(); A.y+=1;a1.y++; a1.showy();输出结果选择:A、y=3; B、y=4; C、y=5; D、程序运行出错 45.下面关于构造函数的说法不正确的是(B)A、构造函数也属于类的方法,用于创建对象的时候给成员变量赋值。B、构造函数不可以重载。C、构造函数没有返回值。D、构造函数名称一定要和类名相同。46.给出如下代码:classTest{privateintm;publicstaticvoidfun(){//somecode...如何使成员变量m被函数fun()直接访问?(C)A、将privateintm改为protectedintmB、将privateintm改为publicintmC、将privateintm改为staticintmD、将privateintm改为intm47.为AB类的一个无形式参数无返回值的方法method书写方法头,使得使用类名AB作为前缀就可以调用它,该方法头的形式为(A)。A.staticvoidmethod()B.publicvoidmethod()C.finalvoidmethod()D.abstractvoidmethod()48.如果类中的成员变量可以被同一包访问,则使用如下哪个约束符?(D)A、privateB、publicC、protectedD、nomodifier49.构造方法何时被调用(B)A.类定义时 B.创建对象时C.调用对象方法时 D.使用对象的变量时50.如果任何包中的子类都能访问超类中的成员,那么应使用哪个限定词(C)A.public B.privateC.protected D.transient51.Java变量中,以下不属于复合类型的数据类型是(B)A.类 B.字符型C.数组型 D.接口52.对象使用时,下面描述错误的是(B)A.通过“.”运算符调用成员变量和方法B.通过成员变量的访问权限设定限制自身对这些变量方法的调用C.将一个对象申明为类的成员时,必须在使用前为其分配内存D.在方法中使用对象作为参数时,采用引用调用(也解释的通,但一定要了解实质为值调用)53.Java编程所必须的默认引用包为(B)A.java.sys包 B.java.lang包

C.java.new包 D.以上都不是54.定义一个类名为“MyClass.java”的类,并且该类可被一个工程中的所有类访问,那么该类的正确声明应为:(C)A.privateclassMyClassextendsObjectB.classMyClassextendsObjectC.publicclassMyClassD.privateclassMyClassextendsObject55.内部类是在一个类内嵌套定义的类。其特点描述错误的是(A)A.只能在定义它的类或程序段中或表达式内匿名使用,外部使用时必须给出类的全名B.可以使用它所在类的静态成员变量或实例成员变量,但不可以使用所在类中的局部变量(后半句可对可错,看怎么理解)C.可以作为其它类的成员,而且可访问它所在类的成员D.除static内部类外,不能在类内声明static成员二、填空题(每空0.5分,共26.5分)1、在类声明中提供类标志的关键字是class。2、当一个方法中有多个参数时,参数之间是用英文逗号隔开。3、在Java中,使用变量遵守先声明后使用(先定义后使用)的原则。4、比较两个字符串是否相同采用equals()方法。5、抽象方法是一种仅有方法头,没有具体方法体和操作实现的方法,该方法必须在抽象类之中定义。6、包定义时,需使用关键字package来实现。创建一个名为MyPackage的包的语句是packageMyPackage;。要使用包中的类,必须用关键字import导入这些类所在的包。当要引用包中所有的类时,类名可以用通配符*号代替。7、对象是由一组属性和对这组属性进行操作的一组服务组成的。对象是指具体的事物,而类是指一类具有某种共性的事物。由类来确定具体对象的过程称为实例化。8、对一类对象的抽象则是类,而类的实例化结果是对象。一个类是由类声明和类体两部分组成。类修饰符有3种,它们分别是public、abstract和final。8、抽象类不能被实例化,它不具备实际功能,只用于衍生子类。抽象方法是只有方法声明,没有代码实现的空方法。9、当一个类的类修饰符为final时,说明该类不能被继承,即不能有子类。10、Java用extends关键字指明继承关系。一个类要从另一个类继承变量和方法,必须使用关键字extends。Java程序在extends之后只能有一个父类,即extends只能实现单继承。在Java中只能实现单继承(Java不支持多重继承),但可通过接口实现多重继承。11、要在类声明中实现接口,需使用关键字implements。一个类可实现多个接口,各接口名是以英文逗号分隔。12、在Java中,变量分为成员变量和局部变量。在类体中声明的变量称为成员变量。在方法中声明的变量称为局部变量。成员变量在整个类体中有效,而局部变量只在定义它的方法内有效。如果局部变量名及成员变量名相同,则成员变量被屏蔽。13、在Java程序中,使用关键字this来引用当前对象。Java中通过关键字super来实现对父类成员的访问。14、一个方法的定义是有方法声明和方法体两部分组成。方法声明包括方法名、返回类型和形式参数,一个方法的标志是圆括号。15、构造方法的方法名要求及类名相同,而且无返回值。构造方法只能通过new运算符调用,用户不能直接调用。16、方法重载是指多个方法享有相同的名字,但这些方法的参数必须不同,或者是参数的个数不同,或者是参数类型不同。17、一个对象的生命周期包括3个阶段:创建、使用和释放(消亡)。18、对象通过使用运算符“.”实现对自己的变量访问。19、面向对象的3个特性是:封装性、继承性和多态性。在Java中,通过对象的封装,实现了模块化和信息隐藏。20、两个方法具有相同的名字,相同的参数表和相同的返回类型,只是函数体不同,则称为重写。21、Java中成员方法可分成两种:类方法和实例方法。用关键字static修饰的方法就称为类方法。实例方法可对当前对象的实例变量进行操作,也可对类变量进行操作。实例方法不但可以访问实例变量,也可以访问类变量。类方法不能访问实例变量,只能访问类变量。22、在Java中,用关键字abstract来修饰一个类,则该类为抽象类。若某个类包含了抽象方法,则该类必须被定义为抽象类。23、接口的定义,需使用关键字interface来声明。接口中没有什么实例方法,所有的成员方法都是publicabstract方法。24、声明父类时,需使用关键字extends来实现。由于Java的继承性,所以子类的成员数目比父类的成员数目多。三、简答题(每题5分,共60分)第一步:理解考核知识点和考核的目的。第二步:背下来,记忆清晰准确。第三步:能把知识点用自己的话准确的描述出来。1、super()及this()的区别?解答:this为当前类的对象的引用,所有资源都可以访问。super为父类对象的引用,在子类访问父类的成员和行为时使用,必须受类继承规则的约束。在构造函数中,如果第一行没有写super(),编译器会自动插入。但是如果父类没有不带参数的构造函数,或这个函数被私有化了(用private修饰)。此时你必须加入对父类的实例化构造。而this就没有这个要求,因为它本身就进行实例化的构造。而在方法中super和this使用的方法就差不多了。只不过super要考虑是否能访问其父类的资源。2、请列举Java语言中的权限访问修饰符,并说明每种权限的含义。 解答:正确使用权限访问修饰符,能够有效控制类以及类成员的安全性,Java语言中有四种访问修饰符,包括public、同包、protected以及private,一般情况下,应用中的类多是public权限,属性多是private权限,方法多是public权限。参考答案:Java语言中有四种权限访问修饰符,即public、protected、同包以及private。 public表示公共权限,即任何包中都可以访问;protected表示受保护权限,即同包中可以访问,同包中的子类可以访问:同包权限是默认权限,即不显示指明权限修饰符的时候就是同包权限,表示只有同包中可以访问;private是私有权限,表示只能在本类中访问。3、java中实现多态的机制是什么?解答:静态的多态:方法名相同,参数个数或类型不相同。(overloading) 动态的多态:子类覆盖父类的方法,将子类的实例传及父类的引用,调用的是子类的方法;实现接口的实例传及接口的引用,调用的实现类的方法。4、abstractclass和interface的区别。解答:(1)抽象类通过extends继承,只能继承一个抽象类;接口通过implements使用,可以实现多个接口。(2)抽象类可以有部分实现,抽象类和接口都不能创建实例。声明方法的存在而不去实现它的类被叫做抽象类(abstractclass),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract类的实例。然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。Abstract类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义staticfinal成员变量。接口的实现及子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对象上调用接口的方法。由于有抽象类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口类型或从接口类型转换,instanceof运算符可以用来决定某对象的类是否实现了接口。5、静态变量和实例变量的区别?是否可以从一个static方法内部发出对非static方法的调用并说明理由?解答:(1)声明时静态变量用static修饰,静态变量属于整个类,被该类的所用实例对象所共有。实例变量属于该类的某个对象,拥有自己的特征。(2)静态变量在类加载初始化的时候分配内存并初始化,实例变量在由该类实例化对象时进行分配内存并初始化。(3)调用方法不同。静态方法可以调用静态变量,不可调用实例变量。实例方法可以调用静态变量、实例变量 不可以从一个static方法内部发出对非static方法的调用,因为static方法属于整个类,实例方法得由该类的某个对象来调用。当调用包含非static方法的static方法时,该类不确定是否存在实例化对象,所以在static方法内调用非static方法时将出现错误。鉴于此道理不可以,编译阶段就会提示该调用的错误。不可以,如果其中包含对象的method(),不能保证该对象初始化.6、说说你说知道的设计模式。解答:单例模式、工厂模式和命令模式。7、AnonymousInnerClass(匿名内部类)是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)?、解答:匿名内部类可以继承其他类或完成其他接口。8、StaticNestedClass和InnerClass的不同,说得越多越好。解答:(1)StaticNestedClass是被声明为静态(static)的内部类,它可以不依赖于外部类实例被实例化。而通常的内部类需要在外部类实例化后才能实例化。Static内部类可以包含static成员;普通内部类不可以。9、什么是方法重载(overload)?什么是方法的重写(Override)?Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型?解答:方法重载:如果在一个类中定义了多个同名的、相同返回值类型的方法,它们或有不同的参数个数或有不同的参数类型(不同的形参列表),则称为方法的重载(Overloading)。方法重写:如果在子类中定义某方法及其父类有相同的名称和参数,我们说该方法被重写(Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被"屏蔽"了。区别:方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类及子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。Overloaded的方法是可以改变返回值的类型和权限修饰符。如果父类定义方法A,子类要重写方法A,则子类不能使用其它返回类型,必须使用父类一致的返回类型或比父类返回类型小。另外解析重载:如果一个类的某个行为,会有不同的算法和逻辑,例如,Math类的计算绝对值的方法,既可以计算int类型数值的绝对值,也可以计算double类型数值的绝对值。这种情况下,每种类型都定义一个不同的方法名,如abInt、absDouble,那么类的可读性就较差,使用时,必须熟悉处理每种类型参数所对应的方法名。然而,如果使用同一个方法名,而使用不同的形式参数来区别这些方法,那么就具有很好的可读性,如abs(inti)、abs(doubled)等。可读性强的代码是企业对开发人员的基本要求,方法重载能够使得代码有很好的可读性。方法重载指的是在一个类中可以声明多个相同名字的方法,而方法的形式参数有区别。调用这些同名的方法时,JVM会根据实际参数的不同绑定到不同的方法。10、构造器Constructor是否可被override?解答:构造器Constructor不能被继承,因此不能重写Override,但可以被重载Overload。11、是否可以继承String类,并说明理由?String类是一个“不可变类”,请解释“不可变类”的含义。 解答:不可以,因为String类是final类故不可以继承。 解析不可变类:String类是一个不可变类,即immutable类。所谓不可变,意思是当一个字符串被初始化后,它的值就不会被改变。例如,Strings=newString(“hello”)为将初始化一个值为hello的字符串,如果调用s.toUpperCase()看起来是把hello变为大写的HELLO,然而事实上并不会把已有的hello变为HELLO,而是在新的空间初始化一个HELLO字符串。也正因为有这种不可变性,所以才能支持“字符串实例池”的使用。 参考答案:所谓的不可变类,就是当字符串初始化后,就不能够被改变。12、请说明Java语言中的值传递规则。当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?第一问解析:值传递时编写应用时不可避免的操作。例如某方法声明形式是publicvoidf(intx){},写方法是,必须为其传递一个int类型的实际参数,如f(10)。又如publicvoidg(Employee)。那么使用该方法时,必须为其传递一个Employee类型的实际参数,例如g(newEmployee())。所以,对于初级程序员来说,了解Java语言的值传递规则非常重要。Java语言是本类型传递的值,例如f(10),仅仅把10复制给形式参数x,是值的拷贝。而引用类的传递时引用,即虚地址,例如g(newEmployee())是把实际参数的虚地址传递给形式参数e,也就是说实际参数和形式参数的虚地址相同,物理上是同一个对象。第一问解答:基本数据类型传递的是值,引用类型传递的是引用,即虚地址。第二问解答:是值传递。Java编程语言只有值传递参数。当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用。对象的内容可以在被调用的方法中改变,但对象的引用是永远不会改变的。四、程序题(每题5分,共25分)1、补足代码定义一个抽象类AbstractTest,其中有一个公共的抽象方法printMsg()。然后定义此抽象类的一个子类DefaultTest,包括的成员变量有姓名,学号,分数,且此类中包括二个构造方法。abstractclassAbstractTest{(1)(2)Stringname;Stringid;intscore;//接收三个参数的构造方法(3)//接收姓名和学号二个参数的构造方法(4)//实现抽象方法,方法体为打印出学生的姓名及成绩(5)答案:abstractclassAbstractTest{ //抽象方法定义 publicabstractvoidprintMsg();publicclassDefaultTestextendsAbstractTest{ Stringname; Stringid; intscore; *接收三个参数的构造方法 publicDefaultTest(Stringname,Stringid,intscore){ =name; this.id=id; this.score=score; *接收姓名和学号两个参数的构造方法 publicDefaultTest(Stringname,Stringid){ =name; this.id=id; *实现抽象方法,方法体为打印出学生的姓名及成绩 publicvoidprintMsg(){ System.out.println("学生"++"的成绩为:"+this.score);2、补足代码定义接口Student,该接口中有一个无参、无返回值的方法prtMsg;定义类College,包括的私有属性有id和name,包括一个接收学生学号和姓名的构造方法,并且实现Student接口。interfaceStudent{ (1)(2)//College类的声明,实现Student接口 (3)//定义私有成员变量id和name,类型自定 (4)//构造方法声明和定义,接收二个参数(5)//实现prtMsg方法的声明 //prtMsg的方法体 System.out.println(id+name);答案:interfaceStudent{ voidprtMst();publicclassCollegeimplementsStudent{ //定义私有成员变量id和name,类型自定 privateStringname; privateStringid; *构造方法声明和定义,接收二个参数 publicCollege(Stringname,Stringid){ =name; this.id=id; *实现prtMsg方法的声明 publicvoidprtMst(){ //prtMsg的方法体 System.out.println(id+name);3、改正下面程序段中的错误(共5处)publicclassStudent{ Stringid; Stringname; intsalary; publicvoidTest(Stringid,Stringname,intsalary){//1:意图为该方法为构造方法,需去掉返回值,并改正方法名 this.id=id; =name; this.salary=salary; publicvoidchangeInfo(Stringid,intsalary){//2:返回值改为boolean booleanresult; if(id==this.id){//3:==改为equals()方法 th

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论