Java中的私有扩展

Private extend in Java

本文关键字:扩展 Java      更新时间:2023-10-16

在C++中,我们可以将基类私有地扩展(派生)到子类:

class Base
{
// ....
};
class Child : private Base
{
// ....
};

Java对应的语法是什么如果Java没有,Java程序员该怎么办?

Java的继承语法:

class Base {}
class Child extends Base
{
  // ...
}

Java中没有私有继承。Java只有公共继承。也就是说,您既继承了实现又继承了接口。

使用私有继承,您将只继承实现。据我记忆所及,它基本上是一种更静态的构图形式。

在大多数情况下,你可以使用合成来做同样的事情。

public class Child{
   private Base base;
   public Child(...){
       base = new Base(...);
   }
}

在某种程度上,您可以使用私有内部类来实现类似的效果:

public class Base {
    private int privateMember = 10;
    private class Child extends Base {
        public Child() {
            System.out.println("I can see your privates: " + privateMember);
        }
    }
    public static void main(String[] args) throws Exception {
        Base t = new Base();
        Child c = t.new Child();
    }
}

运行上述代码时,控制台上会打印以下消息:

I can see your privates: 10

Java没有任何等价的东西。

在C++中,私有继承实际上意味着:是根据实现的

也就是说,这是一种实现技术,当你有两个类没有is-a关系,但需要访问受保护的成员或必须重新定义其虚拟函数时使用。

因此,根据这个定义,您可以在Java中通过简单地扩展类或使用组合来实现这一点。

private的语法不可用,但您可以获得相同的结果