C++喜欢在Java中受保护

c++ like protected in java

本文关键字:受保护 Java 喜欢 C++      更新时间:2023-10-16

可能的重复项:
如何使数据成员仅对类和子类可访问

在爪哇中,
可以从类、其子类以及同一包中存在的所有类中访问受保护的成员,
但是我希望成员只能从类及其子类访问(就像C ++中的受保护成员一样)。

例如::

class A
{
    protected void fun()
    {
        System.out.println("Hello");
    }
}
class B
{
    public static void main(String args[])
    {
        A a = new A();
        a.fun();        
    }
}

在这里,A 的 fun() 可供 B 访问,即使 B 不是 A 的子类。

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

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

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

也就是说,您

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

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

在 Java 中,protected 意味着"由继承者和同一包中的其他人访问"。

在C++中,受保护的意思是"继承人可以访问"。

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

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