【问题标题】:Java: Is a class a subclass of itself?Java:类是它自己的子类吗?
【发布时间】:2010-10-24 18:50:10
【问题描述】:

一个类可以是它自己的“子类”,如果它的内部类扩展了外部类 因此该类以某种方式扩展自身而不会引发任何异常。那么,这真的意味着一个类也是它自己的一个子类吗?

谢谢。

【问题讨论】:

    标签: java class inheritance


    【解决方案1】:
    public class ParentClass {
    
        int intField = 10;
    
        class InnerClass extends ParentClass {
    
        }
    
        public static void main(String... args) {
            ParentClass parentClass = new ParentClass();
            InnerClass innerClass = parentClass.new InnerClass();
    
            System.out.println(innerClass.intField);
    
            InnerClass innerClass2 = innerClass.new InnerClass();
        }
    }
    

    【讨论】:

      【解决方案2】:

      如果你定义一个类的子类是这样的:

      public class Test {
      
          public static void main(String[] args) {
              // whatever...
          }
      
          class TestChild extends Test {
              // whatever...
          }
      }
      

      那么是的,这是可能的。但请注意,这是两个完全独立的类,除非一个是另一个内部的。

      【讨论】:

      • 您的示例中没有任何其他类的“内部”类。
      • 这些是单独的类。尝试使用内部类。
      • 哎呀,括号搞砸了
      • 想象一下您的项目中的错误! :)
      【解决方案3】:

      实际上 JVM 现在没有关于内部类的任何内容。

      编译后所有内部类都变成普通类,但编译器为它们提供了外部类所有字段的访问器。

      在 OOP 理论中,类不能是它的子类或超类。

      【讨论】:

      • 请注意完全正确。它以字节码格式标记。例如:java.sun.com/javase/6/docs/api/java/lang/…
      • 没错,添加了元数据,以便反射库可以预期它。但是,类格式本身并没有对内部类进行任何特殊处理。它们只是普通的类,碰巧有有趣的名字和一些额外的元数据。
      【解决方案4】:

      子类的定义是它扩展了另一个类并继承了该类的状态和行为。一个类不能扩展自己,因为它是它自己,所以它不是一个子类。内部类可以扩展外部类,因为它们是两个不同的类。

      【讨论】:

        【解决方案5】:

        类不是它自己的子类。内部类可以是某个其他类的子类,但那是一个单独的类。您可以通过比较调用 getClass() 时获得的 Class 实例来验证这一点。

        【讨论】:

          【解决方案6】:

          没有。内部类与其外部类完全不同。除非我误解了你的问题...

          【讨论】:

            猜你喜欢
            • 2016-12-28
            • 1970-01-01
            • 2015-04-21
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多