1、java认证 习题 第02章 有答案版 OK 该试题还有第0103章SCJP 5.0 习题 第02章一、重写和重载 1二、封装、IS-A HAS-A 5四、第二章课后习题 7一、重写和重载问题 1)假设有如下类定义,如下哪些方法可以合法放置在“/Here”的注释之后?public class Rid public void amethod (int i, String s) / Here1) public void amethod (String s, int i) 2) public int amethod (int i, String s) 3) public void amethod (
2、int i, String mystring) 4) public void Amethod (int i, String s) 答案:1和4Amethod 中的大写字母A 意味着这是不同的方法。问题 2)假设有如下类定义,哪些代码可以被合法放置在注释“/Here”之后?class Base public Base (int i) public class MyOver extends Base public static void main (String arg ) MyOver m = new MyOver (10);MyOver (int i) super (i);MyOver (St
3、ring s, int i) this (i);/Here1) MyOver m = new MyOver ():2) super ();3) this (“Hello”, 10);4) Base b = new Base (10);答案:4任何this 或super 的调用都必须是构造函数中的第一行。由于方法已经调用了this,不能有别的调用插入了。问题 3)假设有如下类定义class Mammal Mammal () System.out.println (“Mamml”);class Dog extends Mammal Dog () System.out.println (“Dog”)
4、;public class Collie extends Dog public static void main (String argv ) Collie c = new Collie ();Collie () this (“Good Dog”);System.out.println (“Collie”);Collie (String s) System.out.println (s);将会输出什么?1) Compile time error2) Mammal, Dog, Good Dog, Collie3) Good Dog, Collie, Dog, Mammal4) Good Dog,
5、 Collie答案:2) Mammal, Dog, Good Dog, Collie问题 4)下面哪些论述是正确的?1) 构造方法不能被继承2) 构造方法可以被重写;重写不是重载.3) 父类的构造方法可以使用this调用4) 任何方法都可以调用this和super答案:1问题 5)试图编译并运行下面代码会发生什么?class Base public void amethod (int i, String s) System.out.println (“Base amethod”);Base () System.out.println (“Base Constructor”);public cl
6、ass Child extends Base int i;String Parm = “Hello”;public static void main (String argv ) Child c = new Child ();c.amethod ();void amethod (int i, String Parm) super.amethod (i, Parm);public void amethod () 1) 编译错误2) 错误,super.amethod (i, Parm)语法不正确3) 输出 “Base Constructor”4) 错误,super.amethod的参数名字不正确答
7、案:1这会导致一个错误,意思是说“你不能重写方法使其访问权限更靠近私有”。基类的amethod版本被明确的标注为public,但是在子类中没有标识符。好了,所以这不是在考察你的构造函数重载的知识,但是他们也没在考试中告诉你主题。若这段代码没有省略关键字public,将会输出“Base constructor”,选项3。问题 6)试图编译并运行如下代码时将发生什么?class Mammal Mammal () System.out.println (“Four”);public void ears () System.out.println (“Two”);class Dog extends M
8、ammal Dog () super.ears ();System.out.println (“Three”);public class Scottie extends Dog public static void main (String argv ) System.out.println (“One”);Scottie h = new Scottie ();1) One, Three, Two, Four2) One, Four, Three, Two3) One, Four, Two, Three4) Compile time error答案:3)One, Four, Two, Thre
9、e类是从层次的根部往下创建的。因此,首先输出One,因为它在Scottie h 初始化之前创建。然后,JVM 移动到层次的基类,运行“祖父类”Mammal 的构造函数。这会输出“Four”。然后,运行Dog 的构造函数。Dog 的构造函数调用Mammal 中的ears 方法,因此输出“Two”。最后,Dog 的构造函数完成,输出“Three”。问题7)给定下面的类定义public class Uptonpublic static void main(String argv)public void amethod(int i)/Here下面哪一个在替换/Here 后是合法的?1) public
10、int amethod(int z)2) public int amethod(int i,int j)return 99;3) protected void amethod(long l) 4) private void anothermethod()答案:2、3和4选项1 由于两个原因不会被编译。第一个相当明显,因为它要求返回一个integer。另一个是试着直接在类内部重新定义一个方法。把参数的名字从i 换成z 是无效的,并且一个方法不能在同一个类里重写。问题8)给定下面的类定义class Basepublic void amethod()System.out.println(Base);
11、public class Hay extends Basepublic static void main(String argv)Hay h = new Hay();h.amethod();下面在类Hay 中的哪一个方法将会编译并使程序打印出字符串Hay?1) public int amethod() System.out.println(Hay);2) public void amethod(long l) System.out.println(Hay);3) public void amethod() System.out.println(Hay);4) public void ameth
12、od(void) System.out.println(Hay);答案:3) public void amethod() System.out.println(Hay);选项3 重写了类Base 的方法,因此任何无参数调用都调用这个版本。选项1 修改方法的返回值类型。选项2 将会编译,结果是调用父类中的方法问题9)给定下面的类定义public class ShrubHillpublic void foregate(String sName)/Here下面的哪一个方法可以合法的直接替换/Here?1) public int foregate(String sName)2) public void
13、 foregate(StringBuffer sName)3) public void foreGate(String sName)4) private void foregate(String sType)答案9)2) public void foregate(StringBuffer sName)3) public void foreGate(String sName)选项1 是试着定义一个方法两次,有一个int 返回值并不能帮助将它与存在的foregate 方法相区分。而像选项4 那样改变方法的参数名,也不能与存在的方法相区分。注意,选项3里的foreGate 方法有一个大写的G。二、封
14、装、IS-A HAS-A问题1)假设你被给予如下设计“一个人有姓名,年龄,地址和性别。你将要设计一个类来表示一类叫做病人的人。这种人可以被给予诊断,有配偶并且可能活着”。假设表示人的类已经创建了,当你设计病人类时如下哪些应该被包含在内?1) registration date2) age3) sex4) diagnosis答案1)1) registration date2) diagnosis对于病人来说,注册日期是一个合理的添加域,并且设计明确地指出病人应该有诊断报告。由于病人是人的一种,它应该有域age 和sex(假设它们没有被声明为私有的)。问题 2)当你试图编译并运行如下代码时会发生什
15、么?class Base int i = 99;public void amethod () System.out.println (“Base.amethod ()”);Base () amethod ();public class RType extends Base int i = -1;public static void main (String argv ) Base b = new RType ();System.out.println (b.i);b.amethod ();public void amethod () System.out.println (“RType.ame
16、thod ()”);1)RType.amethod-1RType.amethod2)RType.amethod99RType.amethod3)99RType.amethod4)Compile time error答案:2)RType.amethod99RType.amethod如果这个答案看起来靠不住,试着编译并运行代码。原因是这段代码创建了一个RType 类的实例但是把它赋予一个指向Base 类的引用。在这种情况下,涉及的任何域,比如i,都会指向Base 类中的值,但是方法的调用将会指向实际类中的方法而不是引用句柄中的方法。问题 3)你的首席软件设计者向你展示了她正要创建的新电脑部件系统的
17、草图。在层次结构的顶端是一个叫做Computer 的类,在此之下是两个子类。一个叫做LinuxPC,另一个叫做WindowsPC。两者之间最大的不同点是一个运行Linux 操作系统,另一个运行Windows系统(当然另一个不同在于一个需要不停的重启,另一个则能够可靠的运行)。在WindowsPC 之下是两个子类,一个叫做Server,另一个叫做Workstation。你如何评价你的设计者的工作?1) 使用现在的模式继续做进一步的设计2) 让他重新设计,把操作系统设计为一个成员变量而不是1个类。3) 把WindowsPC去掉,因为很快就会抛弃4) 改变继承结构,删除多余Computer类。答案:
18、2?问题 4)假设有如下类class Base int Age = 33;关于对Age 域的访问,你会如何修改来改进这个类?1)把变量Age定义为private2)把变量Age定义为protected3)把变量Age定义为private,然后提供get方法获取值,set方法更新值。4)把变量Age定义为protected,然后提供get方法获取值,set方法更新值。答案:3问题 5)下面哪些是封装的好处?1) 所有的变量都被封装成对象而不是基本数据类型2) 让所有的变量都被保护起来,以防止意外损坏3) 可以改变类的实现而不影响使用这个类的代码4) 使所有方法都受到保护,防止意外的数据损坏答案:
19、3问题 6)指出三个面向对象编程的主要特点?1) 封装、动态绑定、多态2) 多态、重载、过载3) 封装、继承、动态绑定4) 封装、继承、多态答案:4问题 7)你如何在类中实现封装?1) 让所有变量都是protected,只能通过方法访问2) 让所有变量都是private,只能通过方法访问3) 保证所有的变量都表示成封装类型4) 保证所有的变量都是通过祖先类中的方法访问答案:2四、第二章课后习题1. 哪个语句正确? (可以多选)A. Has-a关系依赖继承B. Has-a关系依赖实例变量C. Has-a关系至少需要两个类D. Has-a关系依赖多态E. Has-a关系总是导致紧耦合正确: B 错
20、误:C 可以类自己的实例作为成员变量,例如表示夫妻关系2. 已知:class Clidders public final void flipper() System.out.println(Clidder); public class Clidlets extends Clidders public void flipper() System.out.println(Flip a Clidlet);super.flipper();public static void main(String args) new Clidlets().flipper();会有什么结果?A. Flip a Clid
21、letB. Flip a ClidderC. Flip a ClidderFlip a ClidletD. Flip a ClidletFlip a ClidderE. 编译失败正确: E 3. 已知:public abstract interface Frobnicate public void twiddle(String s); 哪个类正确?可以多选A. public abstract class Frob implements Frobnicate public abstract void twiddle(String s) B. public abstract class Frob
22、implements Frobnicate C. public class Frob extends Frobnicate public void twiddle(Integer i) D. public class Frob implements Frobnicate public void twiddle(Integer i) E. public class Frob implements Frobnicate public void twiddle(String i) public void twiddle(Integer s) 正确: B和E 4. 已知:class Top publi
23、c Top(String s) System.out.print(B); public class Bottom2 extends Top public Bottom2(String s) System.out.print(D); public static void main(String args) new Bottom2(C);System.out.println( );What is the result?A. BDB. DBC. BDCD. DBCE. 编译失败正确: E5. 选择两个最能描述低耦合的语句A. 类的属性都是私有的B. 类中引用了少量的其他对象C. 对象只有少量的成员变
24、量D. 通过匿名变量引用对象E. 引用变量声明为接口类型,而不是一个类,接口提供了少量的方法。F. 对一个类的修改不会引起另一个累的任何变化。正确: E 和F。6. 已知:class Clidder private final void flipper() System.out.println(Clidder); public class Clidlet extends Clidder public final void flipper() System.out.println(Clidlet); public static void main(String args) new Clidlet
25、().flipper();结果是?A. ClidletB. ClidderC. ClidderClidletD. ClidletClidderE. 编译失败正确: A 父类的final方法是private类型。子类中定义的方法相当于新方法,不是多态。7. 使用下面的代码块,完成下面的代码,可以不用完全填满。Note, you may not have to fill all of the slots.Code:class AgedP _ AgedP() ;_ _ _ _ _public AgedP(int x) _ _ _ _ _public class Kinder extends Aged
26、P _ _ _ _ _ _public Kinder(int x) _super_ _ _ _ _ ();代码块:下面的代码块可以使用多次或者不使用。AgedP super this( ) ;答案:class AgedP AgedP() ;public AgedP(int x) public class Kinder extends AgedP public Kinder(int x) super();As there is no droppable tile for the variable x and the parentheses (in the Kinder constructor),
27、 are already in place and empty, there is no way to construct a call to the superclass constructor that takes an argument. Therefore, the only remaining possibility is to create a call to the no-argument superclass constructor. This is done as: super();. The line cannot be left blank, as the parenth
28、eses are already in place. Further, since the superclass constructor called is the no-argument version, this constructor must be created. It will not be created by the compiler because there is another constructor already present.(Objective 5.4)8. Given:1. class Plant 2. String getName() return plant; 3. Plant getType() return this; 4. 5. class Flower extends Plant 6. / insert code here7. 8. class Tulip extends Flower Which statement(s), inserted at line 6, will compile? (Choose all that apply.)A. Flower getType() return
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1