11

可能重复:
如何使数据成员只能被类和子类访问

在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 的子类,B 也可以访问 A 的 fun()。

如何使所有不是 A 的子类的类都无法访问 A?

编辑:: 我想在 java 中实现这一点。

4

3 回答 3

9

在 Java 中,没有办法做到这一点。

也就是说,您(理想情况下)控制包中的所有代码,因此您只需要确保您自己不使用它。

于 2012-06-01T14:42:55.120 回答
3

在java中没有办法做到这一点。受保护意味着对同一包中的继承者和类可见。但是你可以密封你的包(http://docs.oracle.com/javase/tutorial/deployment/jar/sealman.html),这样没有人可以在你的包中创建新的类。

于 2012-06-01T14:49:16.217 回答
2

在 Java 中,protected 的意思是“继承者和同一个包中的其他人可以访问”。

在 C++ 中,受保护的意思是“可由继承者访问”。

由于 Java 中的包可访问性,它们并不真正等效。

在 Java 中模仿 C++ 保护的唯一方法是在它们自己的包中声明类,但我不建议这样做。

于 2012-06-01T14:48:54.790 回答