本专栏为 JavaSE 的学习笔记及相关项目,专栏长期免费更新 ❤️ ❤️ ❤️

❤️ 个人主页:Nezuko627 欢迎来访~~~
⭐️往期回顾:

  • 【JavaSE】继承中内存发生了什么变化?这篇文章带你深究继承本质,一次搞懂~
  • 【JavaSE】面向对象之封装

文章目录

  • 1 多态引入
  • 2 多态
    • 2.1 多态的具体体现(方法多态与对象多态)
    • 2.2 编译类型与运行类型在程序中的体现
  • 3 使用多态优化
  • 4 向上转型与向下转型
    • 4.1 多态的向上转型
    • 4.2 多态的向下转型
  • 写在最后

1 多态引入

✈️ 我们来看这样一个案例,在我们的生活中,有很多人都会选择养宠物。对于不同的动物,我们需要喂它们不同的食物:

尝试用你现有的知识,编写 Food类、 Animal类,并按照下图编写其相应的子类,提供必要的属性。最后,编写一个 Master类,包含喂养宠物的 feed() 方法。请你随意录入一组信息,并测试功能是否实现。

在前面的两节中,我们学习了封装与继承,我们很容易想到,将 Food类 、 Animal类 作为父类,Fish类 、 Bone类 与 Dog类 、 Cat类 分别作为其子类。根据要求,我们编写代码如下:

  • ⭐️ Food类:
public class Food {private String name;  // 食物名称public Food(String name) {this.name = name;}public void setName(String name) {this.name = name;}public String getName() {return name;}
}
  • ⭐️ Fish类:
public class Fish extends Food{public Fish(String name) {super(name);}
}
  • ⭐️ Bone类:
public class Bone extends Food{public Bone(String name) {super(name);}
}
  • ⭐️ Animal类:
public class Animal {private String name;  // 动物名字public Animal(String name) {this.name = name;}public void setName(String name) {this.name = name;}public String getName() {return name;}
}
  • ⭐️ Dog类:
public class Dog extends Animal{public Dog(String name) {super(name);}
}
  • ⭐️ Cat类:
public class Cat extends Animal{public Cat(String name) {super(name);}
}
  • ⭐️ Master类:
public class Master {private String name;  // 名字public Master(String name) {this.name = name;}public void setName(String name) {this.name = name;}public String getName() {return name;}// 给小狗喂食public void feed(Dog dog, Bone bone){// 给小狗吃骨头System.out.println("主人 " + name + " 给 " + dog.getName() + " 吃 " + bone.getName());}// 给小猫喂食public void feed(Cat cat, Fish fish){// 给小猫吃鱼System.out.println("主人 " + name + " 给 " + cat.getName() + " 吃 " + fish.getName());}
}
  • ⭐️ Main测试类:
public class Main {public static void main(String[] args) {// 领养宠物Dog dog = new Dog("大黄狗");Cat cat = new Cat("小花猫");// 登记主人信息Master master = new Master("祢豆子");// 提供食物Bone bone = new Bone("炸排骨");Fish fish = new Fish("小黄鱼");// 喂养大黄狗master.feed(dog, bone);// 喂养小花猫master.feed(cat, fish);}
}

【JavaSE】面向对象之多态、向上转型与向下转型相关推荐

  1. 【转】面向对象之多态(向上转型与向下转型)

    转:https://blog.csdn.net/qq_31655965/article/details/54746235. 多态,大概每个人都知道.但是,又有几个人真的理解什么是多态.多态有哪些细节呢 ...

  2. Java 面向对象编程(三)——多态,方法重写,向上转型,向下转型

    所谓多态,就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪 ...

  3. 【Java挠头】继承、抽象、接口、多态、向上转型、向下转型等精妙干货

    –本文摘要–     1.本文的目标读者:是了解Java基础,且对面向对象概念有所了解,但是对Java中继承.抽象类.接口.多态等等概念搞不清的初学者.     2.本文的内容摘要:讲述Java中的一 ...

  4. 第三次学JAVA再学不好就吃翔(part35)--多态向上转型和向下转型

    学习笔记,仅供参考 文章目录 面向对象 多态 多态向上转型和向下转型 多态的好处和弊端 面向对象 多态 多态向上转型和向下转型 我们首先通过以下代码复习一下自动类型提升和强制类型转换: class B ...

  5. 多态、向上转型、向下转型

    7.2.1 引入 多态是继封装.继承之后,面向对象的第三大特性. 生活中,比如求面积的功能,圆.矩形.三角形实现起来是不一样的.跑的动作,小猫.小狗和大象,跑起来是不一样的.再比如飞的动作,昆虫.鸟类 ...

  6. 多态的向上转型与向下转型

    多态的向上转型与向下转型 多态的转型分为向上转型与向下转型两种: A:向上转型:当有子类对象赋值给一个父类引用时,便是向上转型,多态本身就是向上转型的过程. 使用格式: 父类类型  变量名 = new ...

  7. 秒懂Java多态的引用类型转换——向上转型、向下转型(强制转型)

    多态的转型分为向上转型和向下转型两种 向上转型 多态本身是子类类型向父类类型向上转换的过程,这个过程是默认的.当父类引用指向一个子类对象时,便是向上转型. 使用格式: 父类类型 变量名 = new 子 ...

  8. 关于java多态,向上转型,向下转型

    首先,java多态是建立在java继承的基础上的,它表现的是同一种行为的不同表现形式,注意,是行为,即多态是java父子类中的方法的一个特性,而不是父子类中的属性的一个特性,比如: Person p1 ...

  9. Day11多态部分-6 【1.3 对象的向上转型和向下转型】

    [1.3 对象的向上转型和向下转型] + - 向上转型 子类对象赋值给父类类型的引用时 会自动将子类对象对应的类型 提升为父类类型 语法: 父类类型 引用 = new 子类的构造方法(); 特点: 此 ...

最新文章

  1. Mocha BSM基础架构管理——灵活的网络拓扑展现
  2. Oracle和sql server中复制表结构和表数据的sql语句
  3. php处理小程序上传图片,微信小程序上传图片,PHP-Laravel框架实现
  4. CCAI2018丨大会日程发布 聚焦AI展望未来
  5. JavaScript实现离散傅立叶变换DFT算法(附完整源码)
  6. JAVA中小细节(易忽视和易错点)
  7. MongoDB与阿里云达成战略合作,最新数据库独家上线阿里云!
  8. 2021的行情下如何能够赚到自己认知范围内的钱?一些投资需要补充的内容
  9. window.event.srcElement在Firefox IE下的兼容问题
  10. 深度理解cnn 网络
  11. 禁止root用户远程登录或者禁止其他用户登录而不删除它
  12. Android开发学习
  13. 吉米多维奇数学分析习题集每日一题--习题1379
  14. FileZilla Server连接服务器失败
  15. 卸载 Creative Cloud 桌面应用程序(macOS、Windows)
  16. 专访AWR市场副总裁Sherry Hess:全面发力 深耕中国市场
  17. 给IDEA换个酷炫的主题,真的太好看了!
  18. 黄河小浪底调水调沙问题(mathmatica)
  19. 8月12日 JPA复杂查询
  20. NAVICAT 还原mssql bak备份文件

热门文章

  1. python学习-调用邮件接口发送邮件
  2. 阿里Java学习路线:阶段 1:Java语言基础-Java面向对象编程:第30章:链表的定义与使用:课时145:综合实战:超市购物车(含完整代码)
  3. moment如何转换时间戳 毫秒换成为秒的时间戳
  4. 数商云电子采购平台解决方案:构建企业采购管理系统业务架构、应用场景
  5. uniapp九宫格抽奖
  6. 十进制数与其他进制数转换方法及原理
  7. python m4a转mp3_如何将蜻蜓fm文件转化为音频文件
  8. 拖延的原因、误区、及建议
  9. python爬取微博热搜
  10. JavaSE-Adventure(III): Generics 泛型程序设计