- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
假设SList
是TailList
的父类(super class)
。
如果我执行以下代码,
SList s;
TailList t = new TailList();
s = t;
这与 SList s = new TailList();
相同吗?
现在,t的静态类型还是TailList
吗?
最佳答案
当您执行SList s = new TailList();
时,会发生以下情况:
new TailList()
被调用,创建一个新对象,并为其运行 TailList
的构造函数。当构造函数完成时,将返回一个匿名 TailList
引用。TailList
引用被分配给 s
。由于TailList
继承自SList
,因此您也可以通过它来引用它。对对象的引用不会更改对象本身。
想象一下,我在某处放置了一个垃圾桶,然后告诉不知道该物体是垃圾桶的人我在该位置放置了一个“容器”。垃圾桶确实是一个容器,但那个人只知道它是一个容器。这并没有改变它是一个垃圾桶的事实,但另一个人不能安全地假设他可以把垃圾放在那里,或者它被安排在任何时候被清空,因此他不知道调用他所指的“容器”上的此功能。
例如,假设我们有以下代码:
String s = "Hello there";
Object o = s;
o
现在引用一个 String 对象,但将其视为“对象”,它不知道它有长度,也不知道它包含字符,即使它知道.
s
虽然仍然引用 o
所引用的同一个对象,但知道该对象是一个 String
,并且可以在该对象上使用String
功能。
如果我们愿意,我们可以通过称为“转换”的机制假设 o
是一个 String
:
String s2 = (String)o;
我们现在将 o
引用的对象称为 String
。所有这些对对象本身没有任何改变,这只是引用的改变。对于前面的类比,好像被告知神秘“容器”的人会假设该容器更具体地说是一个“垃圾桶”。我们也可能做出错误的假设,认为容器是包装容器
Integer i = (Integer)o; // throws ClassCastException
幸运的是,当我们在 Java 中假设错误时,我们会得到一个 ClassCastException
,这与现实生活中的情况不同,在现实生活中,如果您将元素放入垃圾箱,同时将其称为包装容器,那么您的元素将被扔进垃圾箱。
也许,让您感到困惑的是第一个作业。好吧,SList s = new TailList();
的 new TailList()
部分本身就是对 TailList
构造函数的静态调用,并且它将始终返回 TailList
引用。随后的赋值仍将引用由调用构造的 TailList
对象。
TL;博士
是的,这是同一件事。
关于java - 传承的微妙之处,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21966501/
我正在研究 http://www.qxl.dk/我遇到了问题。如果将最左边的列和中间列之间的间距与中间列和最右边的列之间的间距进行比较,您会发现它们至少相差 10 个像素。 间距是通过使用 10px
我正在寻找一种技术,它不像我见过的大多数技术那样令人讨厌,它会暂时引起人们对一小段通知的注意。 我一直在笨手笨脚地添加和删除类和包装器 div,到目前为止没有取得太大成功。 感谢建议。 最佳答案 我使
我是一名优秀的程序员,十分优秀!