草庐IT

多态、抽象类、接口练习:愤怒的小鸟

curry3000 2023-03-28 原文
public class BridTest {
    public static void main(String[] args) {
        Brid brid = null;
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入你想实例化以下哪种鸟:");
        System.out.println("1:肥胖鸟");
        System.out.println("2:分裂鸟");
        System.out.println("3:爆炸鸟");
        int chiose = sc.nextInt();
        switch (chiose){
            case 1:
                brid = new FatBrid();
                System.out.println("肥胖鸟实例化成功");
                System.out.println("请给小鸟取个名字:");
                brid.setName( sc.next());
                brid.setShout(new NoShout(brid.name));
                break;
            case 2:
                brid = new LieBrid();
                System.out.println("分裂鸟实例化成功");
                System.out.println("请给小鸟取个名字:");
                brid.setName(sc.next());
                brid.setShout(new ZhaShout(brid.name));
                break;
            case 3:
                brid = new BoomBrid();
                System.out.println("爆炸鸟实例化成功");
                System.out.println("请给小鸟取个名字:");
                brid.setName( sc.next());
                brid.setShout(new AoShout(brid.name));
                break;
        }
        brid.hit();
        brid.fly();
        brid.shout1();
    }
}

需求说明:

  • 模拟实现愤怒的小鸟,定义鸟叫的接口,定义"嗷嗷叫",“喳喳叫"两种实现类
  • 定义抽象类,“鸟”,将接口定义为鸟的属性,并定义两个子类,“炸弹鸟”,“分裂鸟”
  • 定义测试类,测试"炸弹鸟”,和"分裂鸟" 叫 和 飞 的行为

1.定义一个接口 鸟叫的接口

package com.chen.pojo.DuoTai1;

public interface Shout {
    public void shout();
}

 2.定义嗷嗷叫的实现类

public class AoShout implements Shout{
    String name;

    public AoShout(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public void shout() {
        System.out.println(name+"嗷嗷叫,实现Shout接口");
    }

}


3.定义喳喳叫的实现类

public class ZhaShout implements Shout{
    String name;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }

    public ZhaShout(String name) {
        this.name = name;
    }

    @Override
    public void shout() {
        System.out.println(name+"喳喳叫,实现Shout接口");
    }
}

4.定义不会叫的实现类

public class NoShout implements Shout{
    String name;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }

    public NoShout(String name) {
        this.name = name;
    }

    @Override
    public void shout() {
        System.out.println(name+"不叫,实现Shout接口");
    }
}


5.定义一个抽象类 鸟

public abstract class Brid {
    String name;

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    private Shout shout;
    public Shout getShout() {
        return shout;
    }
    public void setShout(Shout shout) {
        this.shout = shout;
    }
    public void fly(){
        System.out.println(name+"在Brid抽象父类中飞。。。");
    }
    public void shout1(){
        shout.shout();
    }
    public abstract void hit();
}

6.定义鸟的子类,分裂鸟

public class LieBrid extends Brid{
    @Override
    public void hit() {
        System.out.println(name+"在LieBrid中扔蛋攻击》》》");
    }
}


7.定义鸟的子类,炸弹鸟

public class BoomBrid extends Brid{
    @Override
    public void hit() {
        System.out.println(name+"在BoomBrid中扔蛋攻击》》》");
    }
}

8.定义鸟的子类,肥胖鸟

public class FatBrid extends Brid{
    @Override
    public void hit() {
        System.out.println(name+"在FatBrid中扔蛋攻击》》》");
    }
}

9.定义一个测试类

package PolymorphismAngryBird;
public class BridTest {
    public static void main(String[] args) {
        Brid brid = null;
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入你想实例化以下哪种鸟:");
        System.out.println("1:肥胖鸟");
        System.out.println("2:分裂鸟");
        System.out.println("3:爆炸鸟");
        int chiose = sc.nextInt();
        switch (chiose){
            case 1:
                brid = new FatBrid();
                System.out.println("肥胖鸟实例化成功");
                System.out.println("请给小鸟取个名字:");
                brid.setName( sc.next());
                brid.hit();
                brid.fly();
                brid.setShout(new NoShout(brid.name));
                brid.shout1();
                break;
            case 2:
                brid = new LieBrid();
                System.out.println("分裂鸟实例化成功");
                System.out.println("请给小鸟取个名字:");
                brid.setName( sc.next());
                brid.hit();
                brid.fly();
                brid.setShout(new ZhaShout(brid.name));
                brid.shout1();
                break;
            case 3:
                brid = new BoomBrid();
                System.out.println("爆炸鸟实例化成功");
                System.out.println("请给小鸟取个名字:");
                brid.setName( sc.next());
                brid.hit();
                brid.fly();
                brid.setShout(new AoShout(brid.name));
                brid.shout1();
                break;
        }
    }
}


10.输出的结果

请输入你想实例化以下哪种鸟:
1:肥胖鸟
2:分裂鸟
3:爆炸鸟
1
肥胖鸟实例化成功
请给小鸟取个名字:
小胖
小胖在FatBrid中扔蛋攻击》》》
小胖在Brid抽象父类中飞。。。
小胖不叫,实现Shout接口

Process finished with exit code 0

 

有关多态、抽象类、接口练习:愤怒的小鸟的更多相关文章

  1. postman接口测试工具-基础使用教程 - 2

    1.postman介绍Postman一款非常流行的API调试工具。其实,开发人员用的更多。因为测试人员做接口测试会有更多选择,例如Jmeter、soapUI等。不过,对于开发过程中去调试接口,Postman确实足够的简单方便,而且功能强大。2.下载安装官网地址:https://www.postman.com/下载完成后双击安装吧,安装过程极其简单,无需任何操作3.使用教程这里以百度为例,工具使用简单,填写URL地址即可发送请求,在下方查看响应结果和响应状态码常用方法都有支持请求方法:getpostputdeleteGet、Post、Put与Delete的作用get:请求方法一般是用于数据查询,

  2. 计算机毕业设计ssm+vue基本微信小程序的小学生兴趣延时班预约小程序 - 2

    项目介绍随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱小学生兴趣延时班预约小程序的设计与开发被用户普遍使用,为方便用户能够可以随时进行小学生兴趣延时班预约小程序的设计与开发的数据信息管理,特开发了小程序的设计与开发的管理系统。小学生兴趣延时班预约小程序的设计与开发的开发利用现有的成熟技术参考,以源代码为模板,分析功能调整与小学生兴趣延时班预约小程序的设计与开发的实际需求相结合,讨论了小学生兴趣延时班预约小程序的设计与开发的使用。开发环境开发说明:前端使用微信微信小程序开发工具:后端使用ssm:VU

  3. 牛客网专项练习30天Pytnon篇第02天 - 2

    1.在Python3中,下列关于数学运算结果正确的是:(B)a=10b=3print(a//b)print(a%b)print(a/b)A.3,3,3.3333...B.3,1,3.3333...C.3.3333...,3.3333...,3D.3.3333...,1,3.3333...解析:    在Python中,//表示地板除(向下取整),%表示取余,/表示除(Python2向下取整返回3)2.如下程序Python2会打印多少个数:(D)k=1000whilek>1:    print(k)k=k/2A.1000 B.10C.11D.9解析:    按照题意每次循环K/2,直到K值小于等

  4. ruby-on-rails - rails 多态关联(遗留数据库) - 2

    我使用的是遗留数据库,所以我无法控制数据模型。他们使用了很多多态链接/连接表,就像这样createtableperson(per_ident,name,...)createtableperson_links(per_ident,obj_name,obj_r_ident)createtablereport(rep_ident,name,...)其中obj_name是表名,obj_r_ident是标识符。因此链接的报告将按如下方式插入:insertintoperson(1,...)insertintoreport(1,...)insertintoreport(2,...)insertint

  5. ruby-on-rails - 应用程序显示错误的小时和分钟 - 2

    起初:那不是错误区域的问题。在irb和数据库中,一切都很好。当我想在我的View中显示日期(created_at、updated_at和所有由我自己在每个模型中定义的日期)时,就会出现问题。我试图在application.rb中设置时区并从初始化程序中删除时间格式,但这并没有解决我的问题。Annotategem生成的架构信息:#created_at:datetime#updated_at:datetime#publish_at:datetime来自irb:1.9.2-p290:004>Time.zone=>(GMT+00:00)UTC1.9.2-p290:005>Time.zone.n

  6. ruby - ActiveRecord,通过多态属性查找 - 2

    有这个:classEventtrueenduser=User.create!我可以:Event.create!(:historizable=>user)但我不能:Event.where(:historizable=>user)#Mysql2::Error:Unknowncolumn'events.historizable'in'whereclause'我必须改为这样做:Event.where(:historizable_id=>user.id,:historizable_type=>user.class.name)更新重现问题的代码:https://gist.github.com/fg

  7. ruby-on-rails - 如何使用 graphql-ruby 指定多态类型? - 2

    我有一个UserType和一个可以是Writer或Account的userable。对于GraphQL,我想也许我可以像这样使用UserableUnion:UserableUnion=GraphQL::UnionType.definedoname"Userable"description"AccountorWriterobject"possible_types[WriterType,AccountType]end然后像这样定义我的用户类型:UserType=GraphQL::ObjectType.definedoname"User"description"Auserobject"fie

  8. ruby-on-rails - 如何在 RubyOnRails 中使用 'acts as nested set' 创建一个可排序的接口(interface) - 2

    我一直在为使用acts_as_list的模型实现一些不错的交互界面,这些界面可以对我的mRails应用程序中的列表进行排序。我有一个排序函数,在每次拖放之后使用sortable_elementscript.aculo.us函数调用并设置每条记录的位置。这是在拖放完成后处理排序的Controller操作示例:defsortparams[:documents].each_with_indexdo|id,index|Document.update_all(['position=?',index+1],['id=?',id])endend现在我正在尝试对嵌套集模型(acts_as_nested

  9. python - Ruby 是否有相当于 Python 的扭曲框架作为网络抽象层? - 2

    据我了解,Python的扭曲框架为网络通信提供了更高级别的抽象(?)。我正在寻找在Rails应用程序中使用与twisted等效的Ruby。 最佳答案 看看EventMachine.它不像Twisted那样广泛,但它是围绕事件驱动网络编程的相同概念构建的。 关于python-Ruby是否有相当于Python的扭曲框架作为网络抽象层?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/9

  10. 你真正了解什么是接口测试么?接口实战一“篇”入魂 - 2

    最近在工作中,看到一些新手测试同学,对接口测试存在很多疑问,甚至包括一些从事软件测试3,5年的同学,在聊到接口时,也是一知半解;今天借着这个机会,对接口测试做个实战教学,顺便总结一下经验,分享给大家。计划拆分成4个模块跟大家做一个分享,(接口测试、接口基础知识、接口自动化、接口进阶)感兴趣的小伙伴记得关注,希望对你的日常工作和求职面试,带来一些帮助。注:文章较长有5000多字,希望小伙伴们认真看完,当然有些内容对小白同学不是太友好,如果你需要详细了解其中的一些概念或者名词,请在文章之后留言,后续我将针对大家的疑问,整理输出一些大家感兴趣的文章。随着开发模式的迭代更新,前后端分离已不是新的概念,

随机推荐