java - Java中的多态性以及类和方法之间的关系
问题描述
所以我正在学习java中的多态性,并试图理解这段代码是如何工作的,以及它一步一步地做了什么。这是代码
Hamburger h = new Hamburger ();
FastFood food1 = h;
Food food2 = new Hamburger();
Item item1 = food2;
Item item2 = new Stone();
Eatable e1 = new Hamburger();
Eatable e2 = new FriedRice();
据我了解汉堡包是一个类, h 是一个对象。但是什么是食品和快餐食品?如果我是正确的,Eatable 是接口,它甚至是 Hamburger 类中的一种方法吗?如果使用对象 food2 而不是对象 h 会发生什么?
解决方案
如果我们假设您的代码确实是 Java 并且它编译时没有错误,那么您是对的,Hamburger
它是一个类;您可以这样说,因为您可以通过调用new
相应的构造函数来实例化它(在 Java 中,构造函数将具有它们所属的类的名称)。Stone
和相同FriedRice
。
h
, food1
, food2
, item1
, item2
,e1
和e2
不是对象,它们是对不同类型对象的引用(见下文)。区别很细微,但如果您想了解 Java 的其他一些概念,则需要这样做;首先,那null
不是一个对象……</p>
FastFood
, Food
,Item
和是类还是Eatable
接口不能说。您可以将对象分配给来自不同类类型的相应引用。这意味着, 的实例也Hamburger
必须是 、 和 的实例FastFood
,否则Food
相应的分配将失败。但是您可以从两者中实现这一点,具有类层次结构(<- <- <- <- )或所有四个都是由实现的接口(或通过混合实现,一些是父类,另一些是接口......) .Item
Eatable
Item
Eatable
Food
FastFood
Hamburger
Hamburger
Java 不允许通过名称来区分类和接口,甚至没有一个普遍接受的约定。
推荐阅读
- fiware - FIWARE - iotagent-node-lib 支持 ngsiVersion “ld”
- node.js - Firestore 云功能找不到要更新的文档
- java - 我们如何在 Java 中实现日期拆分/中断
- javascript - 变异等待数组被大json文件填充,vuex
- angular - Angular 如何在没有 NgModel 的情况下默认检查单选按钮
- firebase - 在flutter firebase中实现全文搜索时出错
- azure-devops - Azure Pipelines 中的此上下文中不允许映射值
- python - 了解 matplotlib set_bad 颜色图
- reactjs - 对象不支持 IE 11 上的属性或方法“包含”
- php - CORS 预检请求被拒绝