java - 为什么我需要提供封闭类对象而不是封闭类对象

标签 java inheritance inner-classes

class OuterA {
    class InnerA {
    }
}
class SubclassC extends OuterA.InnerA { 
    SubclassC(OuterA outerRef) {
        outerRef.super(); 
    }
}
class XYZ {
    public static void main(String[] args) {
        new SubclassC(new OuterA());
    }
}

在上面的代码中

  1. 为什么我需要将 OuterA 对象引用传递给要编译的 .java 文件的 SubclassC 构造函数?
  2. 为什么不需要将 InnerA 对象引用传递给 SubclassC 构造函数?

最佳答案

Why do I need to pass OuterA object reference to SubclassC constructor for the .java file to compile?

因为 SubclassC 扩展 InnerA 类的定义。同时,InnerA绑定(bind)OuterA(即InnerA 的所有实例都将绑定(bind)到相应的实例OuterA)。因此,要获得SubclassC的实例,您需要一个OuterA的实例。

Why is InnerA object reference not required to be passed to SubclassC constructor?

因为在创建 SubclassC 时,在底层会首先创建其父类(super class)的一个实例,即会有一个 InnerA 的实例。实际上,您可以将 SubclassC 视为 特殊 类型的 InnerA

关于java - 为什么我需要提供封闭类对象而不是封闭类对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29287037/

相关文章:

java - 在 bean 上使用 @PostConstruct 对 @SqlGroup 进行 Spring 测试

java - 如何指定实现类必须包含特定字段?

java - 关于java类嵌套的一个疑问

java - 从封闭的成员类访问阴影字段 (Java)

java - 如何让 SQLite 使用 YYYY-MM-DD 格式正确按日期排序?

Java获取纳什均衡的玩家/策略的所有组合

java - 如何使用正则表达式 Java 将方括号内的破折号替换为下划线

c# - 对于一个对象,是否可以通过反射或者其他方式得到它的所有子类?

c++ - 覆盖后调用原始继承函数

java - 匿名内部类的 ClassName 相同 - obj.getClass().getName()