文章目录

  • 一、学生喂养三种宠物:猫、狗和鸟
    • (一)编程实现
      • 1、创建动物类
      • 2、继承动物类,创建猫类
      • 3、继承动物类,创建狗类
      • 4、继承动物类,创建鸟类
      • 5、创建学生类
      • 6、创建测试学生类 TestStudent类
      • 7、运行程序,查看结果
    • (二)知识点讲解
    • (三)拓展练习
      • 任务1、汽车接口、公共汽车类与载重卡车类
      • 任务2、驾驶员类、测试驾驶员类

一、学生喂养三种宠物:猫、狗和鸟

  • 动物类(Animal):属性(name,age)方法(speak、move、eat)
  • 猫类(Cat):继承动物类,添加新方法(play)
  • 狗类(Dog): 继承动物类,添加新方法(play)
  • 鸟类(Bird):继承动物类,添加新方法(play)
  • 学生类(Student):属性(name)方法(feed(animal))

(一)编程实现

1、创建动物类

package p03.t03;/*** 功能;动物类* 作者:刘金花* 日期:2022 年05月12日*/
public class Animal {private String name;private int age;public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public void speak() {System.out.println(name + "今年" + age + "岁了。");}public void move() {System.out.println(name + "在动......");}public void eat() {System.out.println(name + "在吃......");}@Overridepublic String toString() {return "Animal{" +"name='" + name + '\'' +", age=" + age +'}';}
}

2、继承动物类,创建猫类

package p03.t03;/*** 功能;猫类* 作者:刘金花* 日期:2022 年05月12日*/
public class Cat extends Animal {/*** 子类改写父类的同名同参方法(纵向多态)*/@Overridepublic void move() {System.out.println("猫咪[" + getName() +"]在爬树。");}/*** 子类改写父类的同名同参方法(纵向多态)*/@Overridepublic void eat() {System.out.println("猫咪[" + getName() + "]爱吃鱼虾。");}/*** 子类添加新的方法*/public void play() {System.out.println("猫咪[" + getName() + "]玩老鼠。");}
}

3、继承动物类,创建狗类

package p03.t03;/*** 功能;狗类* 作者:刘金花* 日期:2022 年05月12日*/
public class Dog extends Animal {/*** 子类改写父类的同名同参方法(纵向多态)*/@Overridepublic void move() {System.out.println("狗崽[" + getName() +"]在走路。");}/*** 子类改写父类的同名同参方法(纵向多态)*/@Overridepublic void eat() {System.out.println("狗崽[" + getName() + "]爱啃骨头。");}/*** 子类添加新的方法*/public void play() {System.out.println("狗崽[" + getName() + "]玩树枝。");}
}

4、继承动物类,创建鸟类

package p03.t03;

/**

  • 功能;鸟类

  • 作者:刘金花

  • 日期:2022 年05月12日
    /
    public class Bird extends Animal{
    /
    *

    • 子类改写父类的同名同参方法(纵向多态)
      */
      @Override
      public void move() {
      System.out.println(“麻雀子[” + getName() +“]在找大虫子。”);
      }

    /**

    • 子类改写父类的同名同参方法(纵向多态)
      */

    @Override
    public void eat() {
    System.out.println(“麻雀子[” + getName() + “]爱吃大虫子。”);
    }

    /**

    • 子类添加新的方法
      */
      public void play() {
      System.out.println(“麻雀子[” + getName() + “]在玩老鹰的羽毛。”);
      }
      }

5、创建学生类

  • 针对不同动物定义不同的喂养方法,这样就无法体现多态
  • 应该定义一个喂养方法,传入的是动物对象,而不是具体的猫对象、狗对象或鸟对象。
  • Student类的feed()方法,参数是Animal对象,可以指向狗、可以指向猫、可以指向鸟,然后调用animal.move()与animal.eat()时就会根据传入的不同动物而呈现不同的形态。Java提供了一个关键字instanceof,用来判断一个对象是否是某个类(或接口)的实例或者子类实例。
package p03.t03;/*** 功能;学生类* 作者:刘金花* 日期:2022 年05月12日*/
public class Student {private String name;public String getName() {return name;}public void setName(String name) {this.name = name;}public void feed(Animal animal) {animal.move(); //体现多态(子类改写了父类的同名同参方法)animal.eat(); // 体现多态(子类改写了父类的同名同参方法)animal.speak(); // 子类完全继承了父类的方法if (animal instanceof  Cat) { // 判断是否是猫实例System.out.println(name + "喂养猫咪[" + animal.getName() + "]。");} else if (animal instanceof Dog) { // 判断是否是狗实例System.out.println(name + "喂养狗崽[" + animal.getName() + "]。");} else if (animal instanceof Bird) { //判断是否是鸟实例System.out.println(name + "喂养麻雀子[" + animal.getName() + "]。");} else {System.out.println(name + "喂养动物[" + animal.getName() + "]。");}}
}

6、创建测试学生类 TestStudent类

  • 代码如下:
package p03.t03;/*** 功能;测试学生类* 作者:刘金花* 日期:2022 年05月12日*/
public class TestStudent {public static void main(String[] args) {// 创建学生对象Student student = new Student();student.setName("张三丰");// 创建第一个动物Animal animal1 = new Cat();animal1.setName("白金");animal1.setAge(3);// 创建第二个动物Animal animal2 = new Dog();animal2.setName("胖墩");animal2.setAge(2);// 创建第三个动物Animal animal3 = new Bird();animal3.setName("飞飞");animal3.setAge(2);// 调用学生对象的喂养方法,传入不同的动物对象student.feed(animal1);student.feed(animal2);student.feed(animal3);}
}

7、运行程序,查看结果

  • 运行TestStudent类

  • 在第十五行、第二十行与第二十五行分别创建猫、狗与鸟对象,注意指向的都是父类Animal变量animal1、animal2与animal3,传入学生对象的feed()方法,在feed()方法调用参数对象的move()与eat()方法时,程序在编译时自动识别具体的子类对象,从而选择性的调用对应的方法,这就是Java多态性的体现。由此可见,多态不仅解决了方法同名的问题,而且还使程序变得更加灵活,从而有效地提高程序的可扩展性和可维护性。

  • 美中不足之处:运行结果当中没有显示出各种动物的玩法

  • 修改Student类,直接添加一句animal.play(),但是要报错,怎么办呢?

  • 此时,我们要利用对象的向下转型(downcasting)

  • 再次运行测试学生类,查看结果

(二)知识点讲解

  • 定义:在Java中,多态指不同类的对象再调用同一个在调用同一个方法时所呈现出的多种不同行为。
  • 说明:通常来说,在一个类中定义的属性和方法被其他类继承或重写后,当把子类对象直接赋值给父类引用变量时,相同引用类型的变量调用同一个方法所呈现出的多种不同形态。
  • 作用:通过多态,消除了类之间的耦合关系,大大提高了程序的可扩展性和可维护性。
  • 注意:Java的多态性是由类的继承、方法重写以及父类引用指向子类对象体现的。由于一个父类可以有多个子类,多个子类都可以重写子类方法,并且多个不同的子类对象也可以指向同一个父类。这样,程序只有在运行时才能知道具体代表的是那个子类对象,这就体现了多态性。

(三)拓展练习

任务1、汽车接口、公共汽车类与载重卡车类

  • 编写汽车接口Vehicle,有跑方法run()。编写公共汽车类Bus和载重卡车类Truck实现汽车接口,公共汽车类增加属性:最大载客量(maxCapacity),增加报站方法(report(String station)),重写跑方法。载重卡车类增加属性:最大载重量(maxLoad),增加装货(load(String cargo, double weight))、卸货方法(unload(String cargo, double weight)),重写跑方法。编写测试类测试2个类,使用汽车类引用公共汽车对象和载重汽车对象,让汽车跑起来.

任务2、驾驶员类、测试驾驶员类

  • 编写驾驶员(Driver)类,声明属性:姓名。方法:驾驶(driver)方法,方法的参数是任务1的汽车接口,方法体中调用汽车接口的跑方法。测试类中调用驾驶员driver方法时参数传递汽车接口的子类对象,查看输出接口。
  • 实现思路:把父接口作为方法的参数;将父接口的子类对象作为参数传入

任务三、学生喂养三种宠物:猫、狗和鸟相关推荐

  1. JAVA面向对象编程——学生喂养三种宠物:猫、狗和鸟

    学生喂养三种宠物:猫.狗和鸟 编程代码 1.创建动物类 2.继承动物类,创建猫类 3.继承动物类,创建狗类 4.继承动物类,创建鸟类 5.创建学生类 6.创建测试学生类 7.查看运行结果

  2. 学生喂养三种宠物:猫、狗和鸟

    文章目录 学生喂养三种宠物:猫.狗和鸟 (一)编程实现 1.创建动物类 2.继承动物类,创建猫类 3.继承动物类,创建狗类 4.继承动物类,创建鸟类 5.创建学生类 6.创建测试学生类 7.运行程序, ...

  3. java任务项目——学生喂养三种宠物:猫、狗、鸟

    文章目录 项目任务:学生喂养三种宠物:猫.狗.鸟 任务实施 1)创建动物类 2)继承动物类.创建猫类 3)继承动物类.创建狗类 4)继承动物类.创建鸟类 5)创建学生类 运行结果 面向对象编程 项目任 ...

  4. 喂养三种宠物:猫、狗和鸟

    任务3.学生喂养三种宠物:猫.狗和鸟 动物类(Animal):属性(name.age).方法(speak.move.eat) 猫类(Cat)继承动物类,添加新方法(play) 狗类(Dog)继承动物类 ...

  5. 【Java面向对象编程——喂养三种宠物】

    文章目录 (一)编程实现 1.创建动物类 2.继承动物类,创建猫类 3.继承动物类,创建狗类 4.继承动物类,创建鸟类 5.创建学生类 6.创建测试学生类 7.运行程序,查看结果 (二)知识点讲解 动 ...

  6. 基于JAVA+SpringMVC+Mybatis+MYSQL的流浪宠物猫狗救助系统

    项目功能: 一套完整的流浪宠物救助系统,系统支持前台会员的注册登陆,流浪猫狗知识,领养中心,团队活动,流浪宠物详情,申请领养等:后台支持管理员的用户信息管理,流浪猫狗信息管理,管理员管理,领养管理,评 ...

  7. 宠物短视频的三种类型分享,选择最适合自己的方向,才能事半功倍

    宠物短视频的三种类型分享,选择最适合自己的方向,才能事半功倍 宠物,其实已经成为了很多人在生活上的小伙伴,也可以说是家人,而且很多外出工作的人也会喜欢养一只小宠物来陪伴自己,有的老人也喜欢和宠物一起生 ...

  8. 爱因斯坦谜题解答(三种算法比较)

    爱因斯坦谜题:     在一条街上有颜色互不相同的五栋房子,不同国籍的人分别住在这五栋房子力,每人抽不同品牌的香烟,喝不同的饮料,养不同的宠物.已知如下情况: 1.  英国人住红色房子里. 2.  瑞 ...

  9. 计算机网络技术及应用 课程 英语,计算机网络应用—现代英语课堂中的第三种语言...

    陶 兰 摘 要 众所周知,传统的课堂教学包括了教师教学语言及教师体态语言.前者指教师为了灌输知识用自己的声音所进行的表达和与学生的交流;后者指教师为了达到教学目的而有意做出的表情.动作和姿势的总和.随 ...

最新文章

  1. 一份微服务架构手稿图,彻底搞定微服务核心原理!
  2. Spring Boot Runner启动器
  3. Android开发之刷新图片到相册 | 刷新视频到相册的方法区分发广播刷新方法
  4. GDB调试qemu-kvm
  5. iphone 微信下浏览器中数字去除下划线
  6. 微信小程序开发--【Hello World 及代码结构】(二)
  7. android的开机动画,设置安卓开机动画、开机logo
  8. 40套各种风格住宿酒店行业网站html5模板大气商务酒店网站模板度假村酒店官方网站模板旅行酒店宾馆整站模板html5网页静态模板Bootstrap扁平化网站源码css3手机seo自适响应
  9. Unity粒子特效系列-龙卷风预制体做好了,unitypackage包直接用!
  10. Linux下iwconfig权限,Linux系统中iwconfig命令使用详解
  11. 双网卡设置一个外网一个内网(两张网卡同时上内外网设置)
  12. matlab高通滤波函数,巴特沃斯高通滤波器—matlab实现
  13. solidworks做运动学分析Motion(牛头刨床为例)机械原理课设(详细)
  14. 记住网站建设这几个步骤
  15. [zt]软件研发的6sigma案例解析
  16. ubuntu上mysql端口3306无法远程连接
  17. 后代选择器和子选择器
  18. 11个开源测试自动化框架,如何选?
  19. LoadRunner9.1下载与破解
  20. JavaScript设计模式之观察者模式(学习笔记)

热门文章

  1. layui 给table里面的添加图标_layui教程---table
  2. 自学MBA,我推荐你看这本《MBA必读12篇》
  3. Burg法求解AR(p)模型参数(三)Levinson递推公式
  4. 更新安卓系统部分代码
  5. HLS 3 FPGA并行化 稀疏矩阵向量乘法(计算机视觉)
  6. 计算机网络复习(部分)
  7. 【爬虫】Python爬虫经验分享--爬取码市招聘项目
  8. matlab srgb,matlab – 将Photoshop sRGB复制到LAB转换
  9. 微信聊天记录删了怎么恢复找回来2022 微信聊天记录删了怎么恢复找回来步骤
  10. 资产设备管理系统方案,什么是智能设备管理系统?