55、在Shapes.java的基类中添加一个打印消息的新方法,但不在派生类中重写它,解释会发生什么。然后在其中一个派生类中重写该方法,而不在其他派生类中重写,看看会发生什么。最后,在所有派生类中重写该方法。
-
若在基类添加打印消息的新方法且不在派生类重写,当通过基类或派生类对象调用此方法,都会执行基类中的方法定义,打印出基类方法设定的消息。因为派生类未重写,所以使用的是基类的默认实现。
-
若仅在一个派生类中重写该方法,当通过这个派生类对象调用此方法时,会执行重写后的方法内容;通过其他未重写该方法的派生类对象或基类对象调用时,执行的是基类中的方法定义。
-
若在所有派生类中重写该方法,当通过各个派生类对象调用此方法时,会分别执行各自派生类中重写后的方法内容;通过基类对象调用时,执行基类中的方法定义。
56、创建一个啮齿动物的继承层次结构:老鼠、沙鼠、仓鼠等。在基类中提供适用于所有啮齿动物的方法,并在派生类中重写这些方法,以便根据啮齿动物的具体类型执行不同的行为。创建一个啮齿动物数组,用不同具体类型的啮齿动物填充它,并调用基类方法,观察会发生什么。
面向对象编程中的继承与多态实践任务
这是一个关于面向对象编程中继承和多态的实践任务。
任务步骤
-
定义基类
首先要定义一个Rodent基类,在其中编写通用方法。 -
创建派生类
创建Mouse、Gerbil、Hamster等派生类,并重写基类中的方法。 -
创建对象数组
创建一个Rodent类型的数组,将不同派生类的对象存入该数组。 -
调用方法并验证多态性
遍历数组并调用基类方法。由于多态性的存在,程序会根据对象的实际类型自动调用相应派生类中重写的方法。
57、创建一个Rodent的继承层次结构,包含Mouse、Gerbil、Hamster等类,在基类中提供所有啮齿动物共有的方法,并在派生类中重写这些方法以根据特定的啮齿动物类型执行不同的行为,创建一个Rodent数组,用不同类型的Rodent填充它,并调用基类方法观察结果。在此基础上,将Rodent类修改为抽象类,尽可能将Rodent的方法设为抽象方法。
Rodent 继承层次结构设计
需要在创建 Rodent 继承层次结构的基础上,把 Rodent 类声明为抽象类,并且将其中能设为抽象的方法都设为抽象方法。
设计说明
- 创建
Mouse、Gerbil、Hamster等类继承自Rodent类。 - 在基类中提供所有啮齿动物共有的方法,并在派生类中重写这些方法以根据特定的啮齿动物类型执行不同的行为。
- 创建一个
Rodent数组,用不同类型的Rodent填充它,并调用基类方法观察结果。
抽象类修改要求
- 将
Rodent类用abstract关键字声明为抽象类。 - 对于那些在基类中无法具体实现、需要派生类去实现的方法,也用
abstract关键字声明为抽象方法。
58、创建一个不包含任何抽象方法的抽象类,并验证你无法创建该类的任何实例。
- 可以创建不包含抽象方法的抽象类,当有一个类不需要有抽象方法,但又想阻止该类的任何实例时,这种做法很有用。
- 由于抽象类不完整,编译器不允许创建抽象类的对象,若尝试创建会得到错误消息,以此确保抽象类的纯粹性,避免被误用。
59、在 Sandwich.java 中添加 Pickle 类。
以下是在 Sandwich.java 中添加 Pickle 类的示例代码:
class Bread {
Bread() {
System.out.println("Bread()");
}
}
class Cheese {
Cheese() {
System.out.println("Cheese()");
}
}
class Lettuce {
Lettuce() {
System.out.println("Lettuce()");
}
}
class Lunch extends Meal {
Lunch() {
System.out.println("Lunch()");
}
}
class PortableLunch extends Lunch {
PortableLunch() {
System.out.println("PortableLunch()");
}
}
// 添加 Pickle 类
class Pickle {
Pickle() {
System.out.println("Pickle()");
}
}
class Sandwich extends PortableLunch {
Bread b = new Bread();
Cheese c = new Cheese();
Lettuc


1263

被折叠的 条评论
为什么被折叠?



