我正在从Udemy, complete java masterclass学习Java。对于挑战“抽象类挑战”,叙述者说我应该在抽象类中创建2个引用和1个值。
在解决方案中,这是结果:
public abstract class ListItem {
// references
protected ListItem rightLink = null;
protected ListItem leftLink = null;
// value
protected Object object;
}
什么使引用成为引用而不是值?
它们都以protected开头,然后我们有类型,然后我们有变量名。唯一的区别是引用已赋值null。
但如果要举例如:
private int myNumber = 10;
上面不称为引用,它被称为类型为int的变量myNumber,值为10。
它不是Java语言环境中的值。在Java语言的上下文中,所有三个字段都是引用。
我将其视为链表上下文中的值。在链表的上下文中,类型为Object
的对象将是存储在列表中的实际值。而ListItem
是对另一个列表项的引用,因为这是链接列表的连接方式。
似乎课程材料没有尽可能清晰。
单词“value”和“reference”在编程语言(包括Java)的上下文中具有非常特定的含义。
但是,这种区别在这里不适用,因为链接和对象都是使用引用实现的。作者正在以更抽象的方式使用这些词来实现数据结构。
通常,数据结构具有“有效载荷”数据的存储,并且可选地存储用于支持数据结构本身的内部工作所需的数据:
等等。当作者说“价值”时,他们指的是存储“有效载荷”数据的变量;当他们说“引用”时,它们意味着用于存储辅助信息的变量,从而实现数据结构的内部工作。在这种情况下,看起来他们希望你建立一个doubly linked list。
我认为本教程将向您展示如何创建LinkedList。所以ListItem必须保留对下一个和上一个Item的引用,所以你的引用是:
protected ListItem rightLink = null;
protected ListItem leftLink = null;
另外,每个Item都可以保留一些值,所以你的值是:
protected Object object;
它可以是任何其他类变量,但教程创建者需要Object。