【问题标题】:Is it possible not to inherit some private inner classes in java?是否可以不继承java中的一些私有内部类?
【发布时间】:2012-05-03 14:42:08
【问题描述】:

我的 Class1 包含许多私有内部匿名类,例如:

ClassAInterface var1=new ClassAInterface {
 .....

当我从 Class1 继承 Class2 时,是否可以不继承所有这些类而是用新的替换?所以所有使用这些类变量的方法将只使用继承类中的对象。还是以另一种方式存在? 所以我想继承方法,工作逻辑,但不喜欢继承数据结构。 谢谢

【问题讨论】:

  • 私有的东西不能被继承。只有受保护的/公共的成员可以被继承。
  • 来自文档:子类从其超类继承所有成员(字段、方法和嵌套类)。
  • 来自同一文档:“子类不继承其父类的私有成员。但是,如果超类具有访问其私有字段的公共或受保护方法,则这些也可以由子类。”
  • 如果超类的私有字段没有被继承并且因此没有被创建,如何使用它们?它们被创建。就我而言 - 公共方法使用私有字段。我想用另一个字段代替不重写方法。你明白这个问题了吗?

标签: java class inheritance methods anonymous


【解决方案1】:

任何私有的东西都不能在子类中继承。

【讨论】:

    【解决方案2】:

    你应该使用嵌套类或静态内部类:

    public class Class1{
    
       // fields and methods for Class1
    
       protected static MyInnerClassA{
    
           //some fields methods here for MyInnerClassA
       } 
    }
    

    因此,当您从 Class1 继承时,您可以创建 MyInnerClassA 的新实例,因为该实例是可访问的。简而言之,在这种情况下,静态关键字允许独立于其父类的内部类。

    【讨论】:

      【解决方案3】:

      如果您希望继承“方法、工作逻辑,而不是数据结构”,则需要使用 interface more 和 composition 而不是继承。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-05-19
        • 2013-11-22
        • 1970-01-01
        • 1970-01-01
        • 2023-04-03
        • 2011-03-23
        • 1970-01-01
        • 2019-03-13
        相关资源
        最近更新 更多