扩展在C++中,我们可以扩展(派生)一个基类私下为子类:私人在Java中
class Base
{
// ....
};
class Child : private Base
{
// ....
};
什么是Java的相应的语法? 如果Java没有它,Java程序员会做什么?
扩展在C++中,我们可以扩展(派生)一个基类私下为子类:私人在Java中
class Base
{
// ....
};
class Child : private Base
{
// ....
};
什么是Java的相应的语法? 如果Java没有它,Java程序员会做什么?
Java的继承语法:
class Base {}
class Child extends Base
{
// ...
}
有没有在java中私有继承。 Java只有公有继承。也就是说,你们都继承了实现和接口。
对于私有继承,您只能继承实现。据我所知,它基本上是一种更静态的构图形式。
在大多数情况下,您可以使用composition来做同样的事情。
public class Child{
private Base base;
public Child(...){
base = new Base(...);
}
}
不仅仅是组合,它应该被视为继承是实现细节的时候。考虑一个给它的用户一个给定接口的类,在特定的实现中,由于某种原因需要扩展一个不同的接口(这不是它的合约的一部分)。在C++中,你可以私有地实现这个接口,而你的用户不能使用这个事实(即,你的普通用户不能调用你的契约中的方法以外的方法(公共接口),继承应该永远不能用于组合。 – 2012-02-26 16:25:23
我猜在Java中,你会使用内部(或匿名)类来实现* private *接口,因为内部类型将隐式地访问你的类型。 – 2012-02-26 16:27:45
Java没有任何等价物。
在C++中私有继承实际上意味着:在的
即术语实施它是一种实现技术,当您有两个类不具有is-a关系但需要访问受保护的成员或必须重新定义其虚拟功能时。
因此,通过这个定义,您可以通过简单地扩展类或使用组合来在Java中完成此操作。
的私人的语法是不使用,但你可以得到相同的结果
在一定程度上,你可以使用一个私有内部类来达到类似的效果:
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
_我可以看到你的私人物品。大声笑。 :d – ApprenticeHacker 2012-02-26 15:51:02
我们不接触私密部分。 ;-) – 2012-02-26 15:34:10
@ SanjayT.Sharma:如果你的孩子可以访问你班级的私人成员,我会很担心的;) – 2012-02-26 15:35:58
一般来说,我们尽量不要违反OOP和封装的基础知识..如果你想要部分你的课堂是可扩展的,使他们受到保护。私有字段是一个实现细节。 – Voo 2012-02-26 15:36:48