您好,欢迎访问三七文档
问答:1请写出java中多态是什么?答:即一个名字可具多种语义。Java中,多态性体现在两个方面:由方法重载实现的静态多态性和方法重写所实现的动态多态性。2简述java中重写与重载的概念,两者的区别在哪里?答:重载即完成一组相似功能的方法可具有相同的方法名,只是方法所接受的参数个数或参数类型不同。重写就是子类可以修改父类的状态或行为。重载体现了静态多态性,重写体现了动态多态性。3在对函数进行重写时,需要注意哪些问题?答:改写后的方法不能比被重写的方法有更严格的访问权限限制。改写后的方法不能比被重写的方法产生更多的例外。4如果子类中出现了与父类同名同类型的变量或者函数时,父类对应的变量(或函数)是不是丢失掉,而不能再访问?若不是,如何访问?答:不是。用super.variable来访问父类被隐藏的成员变量。用super.method来调用父类中被重写的方法。用super()来调用父类的构造方法。5java中利用类进行封装带来哪些优点?答:实现了模块化和信息隐藏;有利于程序的可移植性和信息隐藏;有利于对象的管理。6什么是抽象类,抽象类如何定义,有何优点?答:用abstract来修饰一个类时,这个类叫做抽象类。当一个类完全表示抽象的概念时,它就不应该被实例化成一个对象,就可定义为抽象类。7什么是内部类,如何定义?答:在一个类的内部嵌套的定义类就是内部类。它可以在一个语句块内部定义,还可以在一个表达式内部匿名定义。8写出抽象函数的定义格式?(包括各种修饰符)abstractreturnTypeabstractMethod([paramList]);实验题目:1定义一个父类Vehicle,该类具有属性speed,sail,capability,具有函数start,travel,stop。定义三个子类Car,Ship,Plane分别继承于Vehicle,根据需要可以添加各子类的额外属性及函数?并编写测试函数进行测试。(要求在定义时对构造函数,travel函数进行重载,重载数不小于3,通过调用这些重载函数,体会一下编译时多态的概念和意义)classVehicle{intspeed,sail,capability;Vehicle(){speed=1;sail=2;capability=5;System.out.println();}Vehicle(intsp,ints,intc){System.out.println(speed=+sp+sail=+s+capability=+c);}voidstart(inti){System.out.println(i=+i);}voidtravel(intx,inty){System.out.println(x=+x+y=+y);}voidtravel(doubled){System.out.println(d=+d);}voidtravel(Strings){System.out.println(s=+s);}voidstop(){System.out.println(stop);}}classCarextendsVehicle{Car(){System.out.println(thisisacar);}}classShipextendsVehicle{Ship(){System.out.println(thisisaship);}}classPlaneextendsVehicle{Plane(){System.out.println(thisisaplane);}}publicclassTest{publicstaticvoidmain(Stringargs[]){Vehiclev=newVehicle(1,2,5);Carc=newCar();v.stop();c.start(3);c.travel(2,3);c.travel(2.35);c.travel(acar!);}}2以第1题为基础,在各子类中分别实现对父类属性speed、sail,函数start进行覆盖,然后再测试函数中分别调用子类和父类中对应属性及函数(这里指的是覆盖的那些成员)。classVehicle{intspeed,sail,capability;Vehicle(){speed=1;sail=2;capability=5;}voidset(){System.out.println(speed=+speed+sail=+sail+capability=+capability);}voidstart(inti){System.out.println(i=+i);}voidtravel(intx,inty){System.out.println(x=+x+y=+y);}voidtravel(doubled){System.out.println(d=+d);}voidtravel(Strings){System.out.println(s=+s);}voidstop(){System.out.println(stop);}}classCarextendsVehicle{intspeed,sail,capability;Car(){speed=2;sail=3;capability=4;}voidset(){System.out.println(speed=+speed+sail=+sail+capability=+capability);}}classShipextendsVehicle{Ship(){System.out.println(thisisaship);}}classPlaneextendsVehicle{Plane(){System.out.println(thisisaplane);}}publicclassTest{publicstaticvoidmain(Stringargs[]){Vehiclev=newVehicle();Carc=newCar();v.set();c.set();}}3以第2题为基础,在测试类中定义指向父类对象的引用指向实例化后各子类的对象,利用这些引用来调用重写后的函数,验证一下到底是调用父类对象还是子类对象的函数,体会一下运行时多态的概念和意义。classVehicle{intspeed,sail,capability;Vehicle(){speed=1;sail=2;capability=5;System.out.println();}Vehicle(intsp,ints,intc){System.out.println(speed=+sp+sail=+s+capability=+c);}voidstart(inti){System.out.println(i=+i);}voidtravel(intx,inty){System.out.println(x=+x+y=+y);}voidtravel(doubled){System.out.println(d=+d);}voidtravel(Strings){System.out.println(s=+s);}voidstop(){System.out.println(stop);}}classCarextendsVehicle{Car(){System.out.println(thisisacar);}voidstart(inti){System.out.println(i+1=+(i+1));}}classShipextendsVehicle{Ship(){System.out.println(thisisaship);}}classPlaneextendsVehicle{Plane(){System.out.println(thisisaplane);}}publicclassTest{publicstaticvoidmain(Stringargs[]){Vehiclev=newVehicle();Carc=newCar();v.start(2);c.start(2);}}4以第3题为基础,将父类修改为一个抽象类,然后编写测试类测试看看抽象类是否可以生成对象,并对各子类的进行测试?答:不能生成对象。子类可生成对象,并可调用抽象父类中的方法。5以第4题为基础,将类Car改写为一个最终类,编写测试类,看看这时能否定义Car的子类。答:不能,最终类一经定义就无法被继承,所以不能再定义Car的子类。
本文标题:Java习题
链接地址:https://www.777doc.com/doc-4715135 .html