Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c++;就像java中保护的一样_Java_C++_Protected_Access Specifier - Fatal编程技术网

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好吧,你可以添加一个安全管理器来阻止这种访问。但在几乎所有情况下,这都是矫枉过正。