java继承多态面试题及答案_第1页
java继承多态面试题及答案_第2页
java继承多态面试题及答案_第3页
java继承多态面试题及答案_第4页
java继承多态面试题及答案_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

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

文档简介

java继承多态面试题及答案选择题1.以下关于Java继承的说法,正确的是()A.一个类可以继承多个父类B.子类不能访问父类的私有成员C.子类重写父类方法时,访问权限可以降低D.所有类都直接或间接继承自`Object`类答案:BD分析:Java不支持多重继承,一个类只能有一个直接父类,A错误;子类重写父类方法时,访问权限不能降低,C错误;子类不能访问父类私有成员,所有类都直接或间接继承自`Object`类,B、D正确。2.以下代码的输出结果是()```javaclassParent{voidshow(){System.out.println("Parent'sshowmethod");}}classChildextendsParent{@Overridevoidshow(){System.out.println("Child'sshowmethod");}}publicclassMain{publicstaticvoidmain(String[]args){Parentp=newChild();p.show();}}```A.Parent'sshowmethodB.Child'sshowmethodC.编译错误D.运行时错误答案:B分析:这是多态的体现,`p`引用指向`Child`对象,调用`show`方法时会执行`Child`类中重写的方法。3.关于方法重写和方法重载,下列说法错误的是()A.方法重写发生在父子类之间,方法重载发生在同一个类中B.方法重写要求方法名、参数列表和返回值类型都相同C.方法重载要求方法名相同,但参数列表不同D.方法重写和方法重载都可以改变访问修饰符答案:B分析:方法重写要求方法名、参数列表相同,返回值类型可以是父类方法返回值类型的子类(协变返回类型),B错误;A、C、D描述正确。4.以下代码能否编译通过()```javaclassA{privatevoidmethod(){System.out.println("A'smethod");}}classBextendsA{publicvoidmethod(){System.out.println("B'smethod");}}```A.能B.不能答案:A分析:父类的私有方法不能被重写,`B`类中的`method`方法和`A`类中的`method`方法没有重写关系,只是同名的两个方法,所以可以编译通过。5.若有以下类定义:```javaclassSuperClass{protectedintvalue;publicSuperClass(intv){value=v;}}classSubClassextendsSuperClass{publicSubClass(){//此处需要添加代码}}```在`SubClass`的构造方法中,正确的代码是()A.`super();`B.`super(0);`C.`value=0;`D.不需要添加任何代码答案:B分析:父类没有无参构造方法,子类构造方法中必须显式调用父类的有参构造方法,所以选B。6.多态的实现方式不包括()A.方法重写B.方法重载C.接口实现D.抽象类继承答案:B分析:方法重载是同一个类中方法的多态表现,但不是实现多态的方式,多态的实现方式主要有方法重写、接口实现、抽象类继承,选B。7.以下代码的输出结果是()```javaclassBase{staticvoidstaticMethod(){System.out.println("Base'sstaticmethod");}}classDerivedextendsBase{staticvoidstaticMethod(){System.out.println("Derived'sstaticmethod");}}publicclassMain{publicstaticvoidmain(String[]args){Baseb=newDerived();b.staticMethod();}}```A.Base'sstaticmethodB.Derived'sstaticmethodC.编译错误D.运行时错误答案:A分析:静态方法不具有多态性,调用静态方法时根据引用类型来决定调用哪个类的方法,`b`是`Base`类型的引用,所以调用`Base`类的静态方法。8.以下关于抽象类的说法,错误的是()A.抽象类不能被实例化B.抽象类中必须有抽象方法C.抽象类可以有非抽象方法D.子类继承抽象类必须实现其所有抽象方法,除非子类也是抽象类答案:B分析:抽象类中可以没有抽象方法,只要类被声明为`abstract`就是抽象类,B错误;A、C、D描述正确。9.若有以下接口和类定义:```javainterfaceMyInterface{voidmethod();}classMyClassimplementsMyInterface{publicvoidmethod(){System.out.println("Methodimplementation");}}```以下代码能正常运行的是()A.`MyInterfaceobj=newMyInterface();`B.`MyInterfaceobj=newMyClass();`C.`MyClassobj=newMyInterface();`D.以上都不对答案:B分析:接口不能实例化,A错误;可以用接口类型的引用指向实现该接口的类的对象,B正确;不能用类类型的引用指向接口对象,C错误。10.以下代码的输出结果是()```javaclassAnimal{voidsound(){System.out.println("Animalmakessound");}}classDogextendsAnimal{@Overridevoidsound(){System.out.println("Dogbarks");}}classCatextendsAnimal{@Overridevoidsound(){System.out.println("Catmeows");}}publicclassMain{publicstaticvoidmain(String[]args){Animal[]animals={newDog(),newCat()};for(Animalanimal:animals){animal.sound();}}}```A.AnimalmakessoundAnimalmakessoundB.DogbarksCatmeowsC.编译错误D.运行时错误答案:B分析:这是多态的体现,数组中存储的`Dog`和`Cat`对象,调用`sound`方法时会执行各自类中重写的方法。11.关于`final`关键字,以下说法错误的是()A.用`final`修饰的类不能被继承B.用`final`修饰的方法不能被重写C.用`final`修饰的变量不能被重新赋值D.用`final`修饰的类可以有抽象方法答案:D分析:用`final`修饰的类不能被继承,也就不能有抽象方法,因为抽象方法需要子类实现,D错误;A、B、C描述正确。12.以下代码的输出结果是()```javaclassA{publicA(){System.out.println("A'sconstructor");}}classBextendsA{publicB(){System.out.println("B'sconstructor");}}publicclassMain{publicstaticvoidmain(String[]args){Bb=newB();}}```A.A'sconstructorB'sconstructorB.B'sconstructorC.编译错误D.运行时错误答案:A分析:创建子类对象时,会先调用父类的构造方法,再调用子类的构造方法。13.以下代码中,`Child`类对`Parent`类的`method`方法进行了()```javaclassParent{voidmethod(inta){System.out.println("Parent'smethodwithint");}}classChildextendsParent{voidmethod(doublea){System.out.println("Child'smethodwithdouble");}}```A.重写B.重载C.既不是重写也不是重载D.编译错误答案:B分析:方法重载要求方法名相同,参数列表不同,这里`Child`类的`method`方法和`Parent`类的`method`方法参数类型不同,属于方法重载。14.若有以下类定义:```javaabstractclassShape{abstractdoublearea();}classCircleextendsShape{privatedoubleradius;publicCircle(doubler){radius=r;}@Overridepublicdoublearea(){returnMath.PIradiusradius;}}```以下代码能正常运行的是()A.`Shapes=newShape();`B.`Shapes=newCircle(5);`C.`Circlec=newShape(5);`D.以上都不对答案:B分析:抽象类不能实例化,A错误;可以用抽象类类型的引用指向实现该抽象类的子类对象,B正确;不能用子类类型的引用指向抽象类对象,C错误。15.以下关于接口的说法,正确的是()A.接口中的方法默认是`publicabstract`的B.接口中的变量默认是`privatefinal`的C.一个类只能实现一个接口D.接口可以有构造方法答案:A分析:接口中的方法默认是`publicabstract`的,变量默认是`publicstaticfinal`的,A正确,B错误;一个类可以实现多个接口,C错误;接口没有构造方法,D错误。16.以下代码的输出结果是()```javaclassGrandParent{voidprint(){System.out.println("GrandParent'sprintmethod");}}classParentextendsGrandParent{@Overridevoidprint(){System.out.println("Parent'sprintmethod");}}classChildextendsParent{@Overridevoidprint(){System.out.println("Child'sprintmethod");}}publicclassMain{publicstaticvoidmain(String[]args){GrandParentgp=newChild();gp.print();}}```A.GrandParent'sprintmethodB.Parent'sprintmethodC.Child'sprintmethodD.编译错误答案:C分析:这是多态的体现,`gp`引用指向`Child`对象,调用`print`方法时会执行`Child`类中重写的方法。17.以下代码能否编译通过()```javainterfaceMyInterface{privatevoidprivateMethod(){System.out.println("Privatemethod");}}```A.能,从Java9开始接口可以有私有方法B.不能,接口中不能有私有方法答案:A分析:从Java9开始,接口可以有私有方法,所以能编译通过。18.以下关于继承中构造方法的说法,错误的是()A.子类构造方法会默认调用父类的无参构造方法B.若父类没有无参构造方法,子类构造方法必须显式调用父类的有参构造方法C.子类构造方法可以在任意位置调用父类构造方法D.父类构造方法不会被子类继承答案:C分析:子类构造方法中调用父类构造方法必须放在第一行,C错误;A、B、D描述正确。19.以下代码的输出结果是()```javaclassX{publicX(){System.out.println("X'sconstructor");}publicvoidmethod(){System.out.println("X'smethod");}}classYextendsX{publicY(){System.out.println("Y'sconstructor");}@Overridepublicvoidmethod(){super.method();System.out.println("Y'smethod");}}publicclassMain{publicstaticvoidmain(String[]args){Yy=newY();y.method();}}```A.X'sconstructorY'sconstructorX'smethodY'smethodB.Y'sconstructorX'smethodY'smethodC.X'sconstructorY'sconstructorY'smethodD.编译错误答案:A分析:创建`Y`对象时先调用`X`的构造方法,再调用`Y`的构造方法,调用`method`方法时先通过`super`调用父类的`method`方法,再执行`Y`类的`method`方法。20.若有以下接口和类定义:```javainterfaceMyInterface{intVALUE=10;voidmethod();}classMyClassimplementsMyInterface{@Overridepublicvoidmethod(){System.out.println("Value:"+VALUE);}}```以下说法正确的是()A.`MyInterface`中的`VALUE`变量可以被修改B.`MyClass`中可以不实现`method`方法C.`MyClass`可以访问`MyInterface`中的`VALUE`变量D.以上都不对答案:C分析:接口中的变量默认是`publicstaticfinal`的,不能被修改,A错误;实现接口的类必须实现接口中的所有抽象方法,B错误;类实现接口后可以访问接口中的常量,C正确。21.以下代码的输出结果是()```javaclassA{intnum=10;voidprintNum(){System.out.println(num);}}classBextendsA{intnum=20;@OverridevoidprintNum(){System.out.println(num);}}publicclassMain{publicstaticvoidmain(String[]args){Aa=newB();a.printNum();}}```A.10B.20C.编译错误D.运行时错误答案:B分析:这是多态的体现,调用`printNum`方法时执行`B`类中重写的方法,输出`B`类中的`num`值。22.关于抽象类和接口的区别,以下说法错误的是()A.抽象类可以有构造方法,接口没有构造方法B.抽象类中的成员变量可以是各种访问修饰符,接口中的成员变量只能是`publicstaticfinal`C.一个类只能继承一个抽象类,但可以实现多个接口D.抽象类和接口都可以有非抽象方法答案:D分析:接口在Java8之前只能有抽象方法,Java8开始可以有默认方法和静态方法,但抽象类一直可以有非抽象方法,D表述不准确;A、B、C描述正确。23.以下代码的输出结果是()```javaclassSuper{publicSuper(inti){System.out.println("Super'sconstructorwithint:"+i);}}classSubextendsSuper{publicSub(){super(5);System.out.println("Sub'sconstructor");}}publicclassMain{publicstaticvoidmain(String[]args){Subs=newSub();}}```A.Super'sconstructorwithint:5Sub'sconstructorB.Sub'sconstructorC.编译错误D.运行时错误答案:A分析:子类构造方法中显式调用父类的有参构造方法,先执行父类构造方法,再执行子类构造方法。24.以下代码中,`Child`类的`method`方法对`Parent`类的`method`方法是()```javaclassParent{publicvoidmethod(){System.out.println("Parent'smethod");}}classChildextendsParent{publicvoidmethod(){System.out.println("Child'smethod");}}```A.重写B.重载C.覆盖D.以上都对答案:A分析:方法重写要求方法名、参数列表相同,这里`Child`类的`method`方法和`Parent`类的`method`方法符合重写的条件,覆盖和重写意思相近,通常说重写,选A。25.若有以下类定义:```javaclassBase{protectedvoidprotectedMethod(){System.out.println("Base'sprotectedmethod");}}classDerivedextendsBase{@OverridepublicvoidprotectedMethod(){System.out.println("Derived'sprotectedmethod");}}```以下说法正确的是()A.`Derived`类中重写`protectedMethod`方法时访问修饰符不能改为`public`B.`Derived`类中重写`protectedMethod`方法时可以将访问修饰符扩大C.`Derived`类中不需要重写`protectedMethod`方法D.以上都不对答案:B分析:子类重写父类方法时访问修饰符可以扩大,B正确,A错误;如果需要改变方法的实现则可以重写,C不准确。简答题26.简述Java中继承的概念和作用。答案:继承是指一个类(子类)可以继承另一个类(父类)的属性和方法。作用包括:代码复用,避免重复编写相同的代码;实现多态,提高代码的灵活性和可扩展性;建立类之间的层次关系,便于代码的组织和管理。27.什么是方法重写?重写的规则有哪些?答案:方法重写是指子类重新实现父类中已有的方法。规则如下:方法名、参数列表必须相同;返回值类型可以是父类方法返回值类型的子类(协变返回

温馨提示

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

评论

0/150

提交评论