没有合适的资源?快使用搜索试试~ 我知道了~
OCJP认证-3期(PX017) 面向对象程序设计-覆盖与多态.docx
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 186 浏览量
2022-07-13
05:28:19
上传
评论
收藏 29KB DOCX 举报
温馨提示
试读
17页
OCJP认证-3期(PX017) 面向对象程序设计-覆盖与多态.docx 学习资料 复习资料 教学资源
资源推荐
资源详情
资源评论
真题分析
面向对象程序设计
覆盖与多态
(1)Given the following Java code:
class Animal { public String noise () { return "peep"} }
class Dog extends Animal {
public String noise () { return "back"; }
}
class Cat extends Animal {
public String noise () { return "move"; }
}
. . .
Animal animal = new Dog();
Cat cat = ( Cat ) animal;
System.out.printIn( cat.noise() ) ;
What is the result?
A. peep
B. back
C. move
D. Compilation fails.
E. An exception is thrown at runtime
答案:E
解析:
� 存在一个 Animal 类别
� Dog 继承 Animal; Cat 也继承 Animal
� 宣告一个 Animal 的 animal 对象, 是由 Dog() 建构出来的.
� 再宣告一个 Cat 的 cat 对象, 是由 animal 物件强制转型为 Animal 型别而来的.
o 从语法角度来看, Cat is-a Animal, 所以 animal 可以强制转型成为 Cat
o 但是执行时期, animal 是由 Dog 建构出来的实体, Dog is not a Cat, 所以会
发生转型例外(java.lang.ClassCastException).
(2)Given the following Java code:
10.interface A { public int getValue (); }
11.class B implements A {
12.public int getValue () { return 1; }
13.}
14.class C extends B {
15.// insert code here
16.}
What three code fragments inserted individually at line 15, make used of polymorphism?
(choose three)
A. public void add(C c) { c.getValue(); }
B. public void add(B b) { b.getValue(); }
C. public void add(A a) { a.getValue(); }
D. public void add(A a, B b) { a.getValue(); }
E. public void add(C c1 C c2) { c1.getValue(); }
答案:BCD
解析:
� 题目是要有多型的特征
� A, E: 传入 C 型别参数, 本身就是 C 的实体, 以 C 对象呼叫 getValue(), 并未有多型
的特征
� B, C, D: 传入 A 或 B 型态的参数, 而本身的对象实体 is-a A 或 B, 就是利用了多型
的特征
(3)Add methods to the Beta class to make it compile correctly.
class Alpha {
public void bar ( int… x ) {}
public void bar (int x ) {}
}
public class Beta extends Alpha {
place here
place here
place here
}
Methods
private void bar ( int x ) {}
public void bar ( int x ) {}
public int bar ( String x ) { return 1; }
public Alpha bar ( int x ) {}
public void bar ( int x, int y ) {}
public int bar ( int x ) { return x; }
答案:
public class Beta extends Alpha {
public void bar ( int x ) {}
public int bar (String x ) { return 1; }
public void bar ( int x, int y ) {}
}
解析:
� Beta 继承 Alpha, 选项中全部都是 bar(), 所以这题是在玩 override 及 overload
� private void bar (int x){}, 从传入参数看到准备要 override, 但是其存取修饰字
小于原本父类别的 public, 所以不可以.
� public void bar (int x){}, 这个就没有问题了.
� public int bar( String x){ return 1;}, 这个在玩 overloading, 传入参数型态不
同, 而且有正确的 return.
� public Alpha bar( int x){}; 这个未处理 return 回 Alpha, 且参数是 int x, 应该是
玩 override, 但是其传回型态也不可以是 Alpha. 应该小于或等于原类别.
� public void bar( int x, int y){}; OK, 因为传入参数个数不同, 玩 overloading
� public int bar(int x){ return x;}, 错误就是出在传回值型态.
(4)Given the following Java code:
class Test1{
public Test1 foo() { return this; }
}
class Test2 extends Test1 {
public Test1 foo() { return this; }
}
class Test3 extends Test2 {
// insert method here
}
Which two methods, inserted individually, correctly complete the Test3 class?(choose
two)
A. public void foo() {}
B. public int foo() {return 3; }
C. public Test2 foo() { return this; }
D. public Test1 foo() { return this; }
答案:CD
解析:
� 这题就是 override.
� 切记:
o 参数个数与型态相同
o 传回值型态要相等或其子类别
� 因为 extends Test2, 所以只要看 Test2 之 foo() 即可. 所以 传回值型态为 Test1
或 Test2 皆可.
� 在检查其 return 是否符合. this 为 Test3, Test3 is-a Test1, Test3 is-a Test2,
所以正确.
(5)Given the following Java code:
public class Bootchy{
int bootch;
String snootch;
public Bootchy() {
this( "snootchy" );
System.out.print( "first " ) ;
}
public Boothchy( String snootch ) {
this( 420, "snootchy" );
System.out.print( "second " ) ;
剩余16页未读,继续阅读
资源评论
努力搬砖的小王
- 粉丝: 16
- 资源: 7706
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功