当前位置: 首页 > news >正文

Java多态课堂练习题

Java多态课堂练习题

题目:动物乐园的多态展示

背景设定
设计一个动物乐园程序,展示不同类型动物的行为特点,要求使用多态特性实现。

1. 基础类设计(已给出部分代码)

// 基类:动物
abstract class Animal {
    protected String name;
    
    public Animal(String name) {
        this.name = name;
    }
    
    public abstract void makeSound();
    
    public void eat() {
        System.out.println(name + " is eating");
    }
}

// 接口:可表演的
interface Performable {
    void performTrick();
}

2. 题目要求

  1. 实现具体动物类

    • 创建至少3个Animal的子类(如Lion、Elephant、Parrot等)
    • 其中一个类需要实现Performable接口
    • 每个类需要:
      • 实现makeSound()方法,输出该动物特有的叫声
      • 可以添加特有的方法(如Lion的roar())
  2. 编写测试类

    • 创建Animal数组,包含各种动物实例
    • 使用循环遍历数组:
      • 调用每个动物的makeSound()
      • 调用eat()
      • 检查是否是Performable实例,如果是则调用performTrick()
  3. 多态体现(简答题):

    • 程序中哪些地方体现了多态性?
    • 向上转型和向下转型分别发生在哪里?

3. 示例代码结构(不完整,供参考)

class Lion extends Animal {
    public Lion(String name) {
        super(name);
    }
    
    @Override
    public void makeSound() {
        System.out.println(name + " says: Roar!");
    }
    
    public void roar() {
        System.out.println(name + " is roaring loudly!");
    }
}

// 请补充其他动物类...

public class ZooShow {
    public static void main(String[] args) {
        Animal[] animals = {
            new Lion("Simba"),
            // 添加其他动物实例
        };
        
        // 遍历数组展示多态行为
    }
}

4. 预期输出示例

Simba says: Roar!
Simba is eating
Polly says: Squawk!
Polly is eating
Polly performs: Sing a song!
Dumbo says: Trumpet!
Dumbo is eating

5. 进阶挑战(可选)

  1. 添加一个Trainer类,包含train(Performable)方法
  2. 实现方法重载:feed(Animal)和feed(Lion)(展示编译时多态)
  3. 使用instanceof检查特定动物类型并调用特有方法

6. 评分标准

项目分值说明
类设计完整性30至少3个动物类,1个实现接口
多态正确实现30正确使用向上转型和接口调用
测试类逻辑20数组遍历和类型检查逻辑正确
代码规范10命名规范,注释清晰
简答题回答10准确指出多态体现点

提示:多态主要体现在父类引用指向子类对象,以及接口引用指向实现类对象时,调用方法会执行实际对象类型的方法实现。

http://www.dtcms.com/a/132164.html

相关文章:

  • ​‌FireCrawl‌爬虫工具​, Craw4ai
  • 算法思想之模拟
  • LaTeX 的pstricks-add宏绘图练习
  • SJ7W5(四角号码7万五千字)取码细则V2
  • AWS Redshift的使用场景及一些常见问题
  • vue+flask+GNN+neo4j图书知识图谱推荐系统
  • 【SQL】COUNT... FILTER 的适用场景
  • 大模型在直肠癌诊疗全流程预测及应用研究报告
  • 已开源!CMU提出NavRL :基于强化学习的无人机自主导航和动态避障新方案
  • Threejs 奇幻几何体:边缘、线框、包围盒大冒险
  • 深入剖析 RocketMQ 中的 MappedFile 技术
  • 使用MCP服务通过自然语言操作数据库(vscode+cline版本)
  • [极客大挑战 2019]PHP 1
  • AI改变生活
  • 苍穹外卖day04
  • JPG同步删除RAW批处理文件
  • Vue ‘v-model‘ directives require the attribute value which is valid as LHS.
  • 八、自动化函数
  • 单基因高低分组和相关基因的GSEA等富集分析教程,代做分析
  • dev中使用auto的方法
  • AETTA: Label-Free Accuracy Estimation for Test-Time Adaptation
  • python编程-实现非确定性有限自动机
  • 正弦波有效值和平均值(学习笔记)
  • 探秘Transformer系列之(27)--- MQA GQA
  • 【一篇关于自我刷题的思考】
  • 使用Python进行AI图像生成:从GAN到风格迁移的完整指南
  • 如何安装git?
  • 智能Todo协作系统开发日志(二):架构优化与安全增强
  • 算法题(125):子集
  • AJAX与Axios基础