java多态----习题

练习
一、选择

  1. 下列代码的运行结果为(C )
    在这里插入图片描述
    A. 我是动物 B. 编译错误 C. 我是动物 我是老虎 我是哈士奇 D. 我是动物 我是老虎 我是哈士奇

  2. 创建一个父类Animal,一个子类Cat,Animal three = new Cat(C );不是

A. 向上转型 B. 自动转型 C. 向下转型 D. 隐式转型

  1. 下列代码怎么修改可以使其成功运行:(A )在这里插入图片描述
    A. 删除掉标注3位置的one.fly( )
    B. 标注1的Animal one=new Bird()修改为Animal one=new Animal()
    C. 删除掉标注2位置的one.eat( )
    D. 标注1的Animal one=new Bird()修改为Bird one=new Animal()

  2. 下列关于instanceof说法不正确的是(C )
    A. instanceof 的返回值为true和false
    B. instanceof可以用来判断对象是否可满足某个特定类型
    C. 可以通过“A instanceof B"表示 A 类可以转型为B类
    D. instanceof可放在if语句的条件表达式中

  3. 已知父类Person,子类Man。判断类Person的对象person1是否满足类Man的实例特征,正确的语 句为( A)
    在这里插入图片描述
    A. if (person1 instanceof Man)
    B. if (man1 instanceof Person)
    C. if (Person instanceof man1)
    D. if (Man instanceof person1)

  4. 在Java中,多态的实现不仅能减少编码的工作量,还能大大提高程序的可维护性及可扩展性,那 么实现多态的步骤包括以下几个方面除了(B )
    A. 子类重写父类的方法
    B. 子类方法设置为final类型
    C. 定义方法时,把父类类型作为参数类型;调用方法时,把父类或子类的对象作为参数传
    D. 运行时,根据实际创建的对象类型动态决定使用哪个方法

  5. 下面代码运行测试后,出现的结果是( D)在这里插入图片描述8下面代码怎么修改可以编译时不报错(多选)(AD )
    在这里插入图片描述
    A. 在位置一处将SpeedBike类设为抽象类,同时将位置2处的speedup也设为抽象方法
    B. 将位置一中的public改为final
    C. 将位置二中speedup()方法改为抽象方法
    D. 将位置二中speedup()方法中加入方法的实现

  6. 下列选项中,关于Java的抽象类和抽象方法说法不正确的是( B)
    A. 抽象类和抽象方法都通过abstract关键字来修饰
    B. 抽象类中必须包含抽象方法
    C. 抽象方法只有方法声明,没有方法实现
    D. 子类如果不重写父类所有的抽象方法,则必须设置为抽象类

二、编程

  1. 应用继承和多态的思想,编写动物类,成员方法是动物叫声。写三个具体的类(猫、狗、羊), 它们都是动物类的子类,并重写父类的成员方法。编写测试类,随机产生三种具体动物,调用叫 声这个方法。 程序参考运行效果如图所示:
    在这里插入图片描述
  2.  定义一个父类Animal类 属性:kind(种类) 方法:创建带参(kind为参数)构造方法            
    

创建cry():void方法
2 编写三个具体的子类Cat类、Dog类、Sheep类
分别重写父类中的 cry() 方法,输出信息分别为
Cat类:小猫的叫声:喵喵喵~~~
Dog类:小狗的叫声:汪汪汪~~~
Sheep类:小羊的叫声:咩咩咩~~~
3. 编写测试类,首先生成长度为5的父类对象数组,然后通过循环依次向数组中存入数据,现 设定存储规则为:
a) 每次随机产生一个0~2的正整数
b) 若数值为 0,则生成一个 Cat 类的对象,存入数组
c) 若数值为 1,则生成一个 Dog 类的对象,存入数组
d) 若数值为 2,则生成一个 Sheep 类的对象,存入数组 最后循环输出数组成员,并分别调用 cry() 方法。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

### 关于Java多态的练习题与示例代码 以下是基于提供的引用内容以及相关知识点设计的一个完整的Java多态习题目及其解决方案。 #### 题目描述 根据以下需求实现一个多态应用场景: 1. 定义一个`Animal`接口,其中包含抽象方法`eat(String food)`用于表示动物进食的行为。 2. 创建两个具体`Dog``Cat`分别继承自`Animal`接口: - `Dog`需额外实现`watchHouse()`方法来模拟看家行为。 - `Cat`需额外实现`catchMouse()`方法来模拟捕鼠行为。 3. 实现一个`Person`作为饲养员,该具有姓名(`name`)年龄(`age`)属性,并提供统一的方法`keepPet(Animal animal, String food)`用来喂养不同型的宠物。 4. 测试上述功能并验证多态的效果。 --- #### 解决方案 ```java // 定义 Animal 接口 interface Animal { void eat(String food); // 进食行为 } // Dog 实现了 Animal 接口 class Dog implements Animal { private int age; private String color; public Dog(int age, String color) { this.age = age; this.color = color; } @Override public void eat(String food) { System.out.println(age + "岁的" + color + "颜色的狗正在吃" + food); } public void watchHouse() { // 特有方法:看家 System.out.println("这只狗正在看守房子"); } } // Cat 也实现了 Animal 接口 class Cat implements Animal { private int age; private String color; public Cat(int age, String color) { this.age = age; this.color = color; } @Override public void eat(String food) { System.out.println(age + "岁的" + color + "颜色的猫正在吃" + food); } public void catchMouse() { // 特有方法:抓老鼠 System.out.println("这只猫正在捕捉老鼠"); } } // Person 代表饲养员 class Person { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } // 使用多态的方式喂养宠物 public void keepPet(Animal pet, String food) { System.out.println("年龄为" + age + "岁的" + name + "正在喂养一只宠物"); pet.eat(food); // 如果需要调用特定方法,则可以尝试向下转型 if (pet instanceof Dog) { ((Dog) pet).watchHouse(); } else if (pet instanceof Cat) { ((Cat) pet).catchMouse(); } } } public class TestPolymorphism { public static void main(String[] args) { // 初始化数据 Dog dog = new Dog(3, "黑色"); Cat cat = new Cat(2, "灰色"); Person personA = new Person("老王", 30); Person personB = new Person("老李", 25); // 测试喂养狗 personA.keepPet(dog, "骨头"); // 测试喂养猫 personB.keepPet(cat, "鱼"); } } ``` --- #### 输出结果说明 当执行上述代码时,控制台将显示如下输出: ``` 年龄为30岁的老王正在喂养一只宠物 3岁的黑色颜色的狗正在吃骨头 这只狗正在看守房子 年龄为25岁的老李正在喂养一只宠物 2岁的灰色颜色的猫正在吃鱼 这只猫正在捕捉老鼠 ``` 此结果展示了如何通过父或接口型的引用变量操作子对象,并利用多态机制动态绑定到实际的对象上[^1]。 同时还演示了在必要情况下进行型转换以访问子特有的成员函数[^2]。 --- #### 思考与扩展 对于问题中的思考部分解答如下: 1. **简化方法定义**:如果多个子共享相同的功能签名(如这里的`keepPet`),则可以通过让它们共同实现某个超或者接口的方式来减少重复代码量。这样不仅提高了可维护性而且增强了灵活性。 2. **调用特有方法**:尽管存在公共基/接口,但如果某些逻辑仅适用于某几个派生别而非全部,则仍可通过运行时期间的安全型强制转换 (`instanceof`) 来达成目标[^3]。 --- 问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值