gpt4 book ai didi

java - 为什么我可以存储实现接口(interface) "in"该接口(interface)的类的实例而不丢失信息?

转载 作者:行者123 更新时间:2023-12-01 19:01:09 27 4
gpt4 key购买 nike

让我们看一下这段代码:

package rpg;

interface A {
// An empty interface
}

public class WarriorClass extends CharacterClass implements A {

final int bab;
public WarriorClass(int a) {
bab = a;
}

public static void main(String[] args) {
A a = new WarriorClass(1);
System.out.println(((WarriorClass) a).bab);
}
}

第一个问题:为什么可以使用接口(interface)A作为a的类型?第二个问题:既然 A 不知道 iVar bab 为什么会知道

System.out.println(((WarriorClass) a).bab);

打印正确的值1

最佳答案

您不将类存储在接口(interface)“中”。您正在接口(interface)类的变量中存储对该类的引用

Java 仅适用于引用。它们都具有相同的长度(就像 C 中的指针)。引用是类型化的,因​​此您必须为其分配一个适当类的对象。

就关系而言,扩展一个类或实现一个接口(interface)意味着新的类对象也属于原始类。所以所有对象都是Object的实例。由于通过扩展/实现您确认新类遵循父类(super class)/接口(interface)的契约(规范),因此它们确实属于它。

关于java - 为什么我可以存储实现接口(interface) "in"该接口(interface)的类的实例而不丢失信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12226852/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com