您好,欢迎访问三七文档
第三章:面向对象作业1基础问题1.1简述面向对象的特点答:面向对象的特征有封装、继承和多态。封装是指隐藏对象的属性和实现细节,仅对外提供公共访问方式;子类继承了父类,就继承了父类的方法和属性,在子类中,可以使用父类中定义的方法和属性,也可以创建新的数据和方法;面向对象的多态性体现为方法的重载和重写,在Java中,子类的对象可以替代父类的对象使用。1.2java类是否可以多继承,怎么实现多继承?答:Java只支持单继承,不允许多重继承。有了接口(interface),就可以得到多重继承的效果。1.3abstractclass和interface有什么区别?答:abstractclass是用来模型化那些父类无法确定全部实现,而是由其子类提供具体实现的对象的类。接口(interface)是一种特殊的抽象类,这种抽象类中只包含常量和方法的定义,而没有变量和方法的实现。1.4int和Integer有什么区别?答:int是基本数据类型,而Integer是引用类型—包装类。包装类Integer使得基本数据类型int的数据变成了类,有了类的特点,可以调用类中的方法。1.5abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized?答:abstract的method不能被static、native和synchronized修饰,abstract的method抽象方法只能被public或protected修饰,其他修饰符皆不可以。1.6方法重载(overload)必须满足___BCE____。A.在不同class中定义的方法B.在同一类型中定义的方法C.方法名必须相同D.返回类型必须相同E.参数一定不同F.参数可以相同1.7重载(overload)和重写(overried,有的书也叫做“覆盖”)的区别?Overload的方法是否可以改变返回值的类型?构造器Constructor是否可被override?答:⑴重载与重写的区别:①重写是子类的方法覆盖父类的方法,要求方法名和参数都相同,而重载必须具有不同的参数列表;②重写的返回的类型必须一直与被重写的方法的返回类型相同,重载可以有不责骂的返回类型,只要参数列表不同就可以了;③重写访问修饰符的限制一定要大于被重写方法的访问修饰符,重载可以有不同的访问修饰符;④重写方法一定不能抛出新的检查异常或者比被重写方法申明更加宽泛的检查型异常,重载可以抛出不同的异常。⑵Overload的方法可以改变其返回值的类型。⑶构造器Constructor不能被继承,因此不能重写Overriding。1.8当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?为什么?答:是值传递。Java中都是由值传递参数的,当一个对象实例作为一个参数被传递到方法中时,参数的值就是该对象的引用。对象的内容可以在被调用的方法中改变,但对象的引用是不会改变的。1.9接口是否可继承接口?抽象类是否可实现(implements)接口?抽象类是否可继承实体类(concreteclass)?答:接口可以继承其它接口。抽象类是可以实现(implements)接口。当实体类有构造函数时可以被抽象类继承。1.10AnonymousInnerClass(匿名内部类)是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)?答:匿名内部类不能继承其它类,但一个内部类可以作为一个接口,由另一个内部类实现。1.11谈谈final,finally,finalize的区别答:final标记的类不能被继承,标记的方法不能被子类重写,标记的变量即称为常量;finally块再异常处理时提供执行任何清除操作。如果抛出一个异常,那么相匹配的catch子句就会执行,然后控制就会进入finally块;Java中允许finalize()方法在垃圾收集器将对象从内存中清除之前做必要的清除工作。这个方法是由垃圾收集器在确定对象没有被引用时对对象调用的。它是在Object类中定义的,因此所有类都继承了它。子类覆盖了finalize()方法以整理系统资源或执行其他工作。1.12StaticNestedClass和InnerClass的不同答:静态内部类是被声明为静态的内部类,它不能使用外层类的非静态的成员变量,内部类中的成员不能声明为static的,只有在外部类或static的内部类中才可声明static成员;静态内部类可以不依赖外部类来实例化,而内部类需要在外部类实例化后才能实例化。2代码分析2.1作用域public,private,protected,以及不写时的区别。辨析下列代码段是否正确答:不正确。当有public、protected、private修饰时有错误,Java权限修饰符public、protected、private用来限定对类成员的访问权限,此处使用private修饰s中是错误的。当不写时正确。2.2哪个选项和show函数重载classDemo{voidshow(inta,intb,floatc){}}(A、C、D)A.voidshow(inta,floatc,intb){}B.voidshow(inta,intb,floatc)C.intshow(inta,floatc,intb){returna;}D.intshow(inta,floatc){returna;}2.3分析下面那些函数可以存在于Demo的子类中。并写出错误答案错误的原因,用单行注释的方式。classDemo{intshow(inta,intb){return0;}}A.publicintshow(inta,intb){return0;}//B.privateintshow(inta,intb){return0;}//C.privateintshow(inta,longb){return0;}//D.publicshortshow(inta,intb){return0;}//E.staticintshow(inta,intb){return0;}//答:(A)可以存在于Demo的子类中。子类对show函数的重写,必须和父类中具有相同的方法名称、参数列表和返回值类型;重写show函数不能使用比父类的show函数更严格的访问权限;重写的show函数必须和父类的show函数同时为static的,或同时为非static的。2.4下列程序能否编译通过,为什么?(1)答:不能编译通过,因为final修饰的变量必须在定义的同时中显式赋值,然后才能使用。(2)答:程序不能编译通过,抽象类的方法只声明,实现部分由它的子类来实现,此处应将{}去掉。(3)答:可以编译通过,且方法addOne设置输出得i的值为0。(4)答:不能编译通过,类的方法不能直接调用。(5)答:不能通过。在执行System.out.println(x)时,接口类A和类B均有属性x,产生歧义。2.4.写出结果。(关于参数传递)(1)(2)(1)运行结果:4;由于Test1类的leftshift方法是静态的,只能操作静态的变量。所以i+=j语句没有被执行。(2)运行结果:1。(3)答:输出结果为:01011。(4)答:运行结果为:i=10i=10。2.5.定义类A和类B如下(类的继承)(1)若在应用程序的main方法中有以下语句:Aa=newA();a.show();则输出的结果如何?答:输出结果为:ClassA:a=1d=2.0。(2)若在应用程序的main方法中定义类B的对象b:Ab=newB();b.show();则输出的结果如何?答:输出结果为:ClassA:a=1d=2.0ClassB:a=3.0d=Javaprogram.2.6写出下面程序的运行结果。(关于static)答:输出结果为:4。2.7补足代码,使程序可以编译通过或者完成特定功能。(1)采用匿名内部类,补足代码interfaceTest{voidfunc();}classDemo{publicstaticvoidmain(String[]args){//补足代码;(匿名内部类)newDemo().show(newTest(){publicvoidfunc(){System.out.println(“implementforfunc);}});}voidshow(Testt){t.func();}}(2)补足compare函数内的代码,不许添加其他函数。classCircle{privatedoubleradius;publicCircle(doubler){radius=r;}publicCirclecompare(Circlecir){//程序代码if(this.radiuscir.radius)returnthis;returncir;//return(this.radiuscir.radius)?this:cir;}}classTC{publicstaticvoidmain(String[]args){Circlecir1=newCircle(1.0);Circlecir2=newCircle(2.0);Circlecir;cir=cir1.compare(cir2);if(cir1==cir)System.out.println(圆1的半径比较大);elseSystem.out.println(圆2的半径比较大);}}
本文标题:面向对象作业
链接地址:https://www.777doc.com/doc-6323829 .html