- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
考虑 Java 中的以下类:
interface I{
}
class A implements I{
}
class B extends A {
}
class C extends B{
}
And the following declarations:
A a = new A();
B b = new B();
一旦有了a = (B)(I) b;
,代码就会编译并运行。而且完全不明白为什么我需要转换为 Interface 和 B 类。在我看来,当 a = b;
没问题时,它会起作用。有人可以向我解释一下上述显式转换的逻辑是什么使代码运行良好吗?
但是一旦有了 I i = (C) a;
它将在运行时失败,因为“a”不指向类 C 的对象。为什么“a”需要指向指向C类的对象?除此之外,我不明白转换为 C 类的逻辑。无论如何,你都会有 I 接口(interface)的引用。最好的问候
最佳答案
只有当转换的对象确实扩展了此类或实现了此接口(interface)时,才可以将对象转换为给定的类或接口(interface)。如果不是(即,如果该对象不是类或接口(interface)的实例),您将得到 ClassCastException。请注意,将对象转换为类不会更改对象的类型。它只允许将其引用为另一种类型,它也是扩展或实现的类型。
让我们看看您的示例:
a = (B)(I) b;
这首先会转换对象 b
,其类型为 B
。到接口(interface)I
。这是可以的,因为 B 扩展了 A,并且 A 实现了 I,这意味着 B 也实现了 I。
然后它再次将同一个对象转换为类B
。 b
是 B
的实例,因此这是有效的。
I i = (C) a;
这会将类型为 A
的对象 a
转换为类 C
。 A 不扩展 C,所以这是不可能的。
关于java - 显式转换背后的逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12857964/
我正在寻找匹配 /(?=\W)(gimme)(?=\W)/gi 或类似的东西。 \W 应该是零宽度字符来包围我的实际匹配项。 也许有一些背景。我想用添加的文字填充替换某些单词(总是 \w+),但前提是
如何在不使用 Intent 连接到 VPN 服务的情况下以编程方式检测流量是否正在通过 VPN。有系统调用吗? 最佳答案 这个有效: private boolean checkVPN() {
我是一名优秀的程序员,十分优秀!