第四章:面向对象编程2

木婉清2023/12/21

1、

image-20231221155516487

程序运行结果

A

B

C

先调用父类,再调用子类

2、

image-20231221155725742

程序运行结果

A

B

C

显示调用 super();

3、

image-20231221155803008

程序运行结果

程序出错

原因:父类A、B的参数没有被初始化

4、

image-20231221155833748

程序运行结果

A

B

C

5、

image-20231221155900951

程序运行结果

Class Animal:str

Class Fish

6、

image-20231221160145347

程序运行结果

Class Animal1

Class Fish

子类 Fish 隐式调用 super(); 由于没有传递参数,所以输出Animal类中无参构造函数中的内容。

7、

image-20231221160323815

以上程序第几行会报错

第 7 行

原因:父类构造函数有参数,而执行 new Fish() 时在第 7 行隐式调用 super(); 没有传递参数,故而在第 7 行报错。

8、

image-20231221160605287

程序运行结果

Class Animal:f1

Class Fish

Class Animal:noname

Class Fish

9、

image-20231221160638231

程序运行结果

Class Animal:f1

Class Fish2

Class Animal:li

Class Fish1

10、

image-20231221160704560

程序运行结果

Employee:zhao,2000.0

重写了 Object 中的方法 toString()

注意:getIncome 是 double 类型

11、

image-20231221160733609

程序运行结果

Employee:zhao,2000.0

12、

image-20231221160753212

程序运行结果

obj.equals(obj2)=false

obj.equals(obj3)=true

只有在两个对象变量指向同一个对象时 equals 方法才返回 true

由于 obj 和 obj2 都 new 了新的 Object(),因此两者相较是false,

而 obj3 的存的地址和 obj 存的一样,因此两者都指向了同一个 Object 的对象,所以,他们相较是 true

13、

image-20231221160834773

程序运行结果

false

e1 和 e2 指向的是不同的对象,因此 equals 之后为 false

14、

image-20231221160858794

程序运行结果

true

解析:

  • equals(); 方法用于引用数据类型比较时,比较的是地址
  • equals(); 方法用于基本数据类型比较时,比较的是值

15、

image-20231221161002578

image-20231221161017562

程序运行结果

true

true

true

false

instanceof 关键字来判断该对象变量所“指向”的对象是否属于该类。

例如:a instanceof Animal; 如果对象 A 属于 Animal 类,则返回 true,否则返回 false

一个对象属于子类,那么它一定属于父类

向上转型与向下转型

 // 父类:Father;子类:Son; 
Father f1 = new Son(); // 向上转型,f1指向Son的对象 
Son s1 = (Son)f1; // 向下转型(需要用到强制类型转换) 
// 此处的f1和s1均属于Son类  

Father f2 = new Father(); 
Son s2 = (Son); // 出错,子类引用不能指向父类对象

16、

image-20231221161205872

程序运行结果

出错

Animal 没有 getFurColor() 方法

17、

image-20231221161224623

程序运行结果

旺财

true

true

18、

image-20231221161249702

程序哪几行会出错,注释错误行之后输出什么内容
Cat c2 = (Cat)an;
System.out.println(c2.getEyesColor());

上述代码会出错

注释之后,输出:yellow

Dog 和 Cat 不是父子类关系,无法转型

19、

image-20231221161342578

程序运行结果

叫声

喵喵

汪汪

对象调用一个重写方法时,调用的是实例类型(Cat、Dog),而不是对象类型(Animal)

20、

image-20231221161405276

程序运行结果

喵喵

汪汪

21、

image-20231221161428595

image-20231221161438469

程序运行结果

喵喵

汪汪

22、

image-20231221161506380

image-20231221161515377

程序运行结果

draw circle

draw square

23、

image-20231221161534812

程序运行结果

draw circle

draw square

24、

image-20231221161555170

程序运行结果

draw circle

draw square

draw circle

draw square

25、

image-20231221161638811

以下哪句不能通过编译?运行时会发生错误?

第 3 句会发生错误

Employee 中没有 getBonus(); 方法

26、

image-20231221161717176

以下哪句不能通过编译?运行时会发生错误?

第 3、4 句会发生错误

27、

image-20231221161738951

以下哪句不能通过编译?运行时会发生错误?

第 1、4 句会发生错误

28、

image-20231221161759525

答案

D

子类和父类间的关系是 is-a 关系

29、

image-20231221161815200

答案

B、C

注意:使用默认访问修饰符声明的变量和方法,对同一个包内的类是可见的。接口里的变量都隐式声明为 public static final, 而接口里的方法默认情况下访问权限为 public。

因此,如果子类和父类不在同一个包中,则子类无法直接使用父类中默认修饰的成员。

30、

image-20231221161842524

答案

B

31、

image-20231221161855775

答案

A

32、

image-20231221161926540

答案

A、B、C、D

33、

image-20231221161944854

答案

A

34、

image-20231221162014310

image-20231221162028235

程序运行结果

fish eat shrimp!

lion eat meat!

35、

image-20231221162055511

程序运行结果

implemented f1

implemented f2

implemented f3

36、

image-20231221162121798

image-20231221162132112

答案

C

注意:

  • 黄色语句错误原因:Outer 的实例 oc 不能调用Inner,Outer类可以调用Inner

  • 绿色语句是打算在外部类以外创建内部类,此时需要使用以下方式:

    Outer.Inner ic = oc.new Inner();

可见第 37 题

37、

image-20231221162305323

程序运行结果

innout

编辑于 2023/12/22 10:47:10