c++;就像java中保护的一样
可能重复:c++;就像java中保护的一样,java,c++,protected,access-specifier,Java,C++,Protected,Access Specifier,可能重复: 在java中, 受保护的成员可以从类、其子类以及同一包中的所有类中访问, 但我希望成员只能从类及其子类访问(就像c++中的受保护成员一样) 例如: class A { protected void fun() { System.out.println("Hello"); } } class B { public static void main(String args[]) { A a = new A();
在java中,
受保护的成员可以从类、其子类以及同一包中的所有类中访问,
但我希望成员只能从类及其子类访问(就像c++中的受保护成员一样) 例如:
class A
{
protected void fun()
{
System.out.println("Hello");
}
}
class B
{
public static void main(String args[])
{
A a = new A();
a.fun();
}
}
在这里,B可以访问A的fun(),即使B不是A的子类
如何使一个非A的子类的所有类都不可访问
编辑::
我想在java中实现这一点。在java中,没有办法做到这一点 也就是说,您(理想情况下)可以控制包中的所有代码,因此您只需确保自己不使用它。在Java中,受保护意味着“可由同一包中的继承者和其他人访问” 在C++保护中意味着“继承者可访问”。 由于Java中的包可访问性,它们实际上并不等同
<> P>在java中,C++可以通过声明类来实现C++保护,但我不建议这样做。 在java中没有办法。受保护意味着同一包中的继承者和类可以访问。但是你可以密封你的包(),这样就没有人可以在你的包中创建新的类。这可能很有用-只是好奇,有没有任何机制可以阻止其他人在你的包中简单地声明他们的代码?@matts参见Polygenme的答案。你可以密封你的jar,以防止在你的包中声明新的类。据说,这是可行的。但是反射允许任何代码绕过可见性限制,如
private
或protected:没有任何方法可以阻止想要获取内部变量的代码。所以…基本上,你不能阻止它的发生,只能让它变得更加困难,而受保护的就是这样做的。@LouisWasserman好吧,你可以添加一个安全管理器来阻止这种访问。但在几乎所有情况下,这都是矫枉过正。