2012-02-26 84 views
3

扩展在C++中,我们可以扩展(派生)一个基类私下为子类:私人在Java中

class Base 
{ 
// .... 
}; 

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

什么是Java的相应的语法? 如果Java没有它,Java程序员会做什么?

+7

我们不接触私密部分。 ;-) – 2012-02-26 15:34:10

+3

@ SanjayT.Sharma:如果你的孩子可以访问你班级的私人成员,我会很担心的;) – 2012-02-26 15:35:58

+0

一般来说,我们尽量不要违反OOP和封装的基础知识..如果你想要部分你的课堂是可扩展的,使他们受到保护。私有字段是一个实现细节。 – Voo 2012-02-26 15:36:48

回答

2

Java的继承语法:

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

有没有在java中私有继承。 Java只有公有继承。也就是说,你们都继承了实现和接口。

对于私有继承,您只能继承实现。据我所知,它基本上是一种更静态的构图形式。

在大多数情况下,您可以使用composition来做同样的事情。

public class Child{ 
    private Base base; 

    public Child(...){ 
     base = new Base(...); 
    } 
} 
+1

不仅仅是组合,它应该被视为继承是实现细节的时候。考虑一个给它的用户一个给定接口的类,在特定的实现中,由于某种原因需要扩展一个不同的接口(这不是它的合约的一部分)。在C++中,你可以私有地实现这个接口,而你的用户不能使用这个事实(即,你的普通用户不能调用你的契约中的方法以外的方法(公共接口),继承应该永远不能用于组合。 – 2012-02-26 16:25:23

+1

我猜在Java中,你会使用内部(或匿名)类来实现* private *接口,因为内部类型将隐式地访问你的类型。 – 2012-02-26 16:27:45

1

Java没有任何等价物。

1

在C++中私有继承实际上意味着:在的

即术语实施它是一种实现技术,当您有两个类不具有is-a关系但需要访问受保护的成员或必须重新定义其虚拟功能时。

因此,通过这个定义,您可以通过简单地扩展类或使用组合来在Java中完成此操作。

私人的语法是不使用,但你可以得到相同的结果

2

在一定程度上,你可以使用一个私有内部类来达到类似的效果:

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 
+0

_我可以看到你的私人物品。大声笑。 :d – ApprenticeHacker 2012-02-26 15:51:02