如何保护类,使其在包外不可见

Posted

技术标签:

【中文标题】如何保护类,使其在包外不可见【英文标题】:How to protect classes so they are not visible outside their package 【发布时间】:2011-02-01 20:19:06 【问题描述】:

我希望能够在我的包中包含两个“受保护”类。也就是说,我不希望我的包之外的文件看到它们是可见的 - 它们仅供包内的内部使用。

我该怎么做?

【问题讨论】:

【参考方案1】:

只需省略所有关键字。默认可见性为package-private,仅在包内可见。

例如:

// class Foo is public
public class Foo

    final private Bar bar = ...;


// class Bar is package-private
// (visible to all classes in the package, not visible outside the package)
class Bar

    ...;

【讨论】:

没错。并且关键字protected意味着它只能被派生类型访问 @Oskar:嗯,从技术上讲,protected 对包外部的派生类型和包内的所有类型都是可见的。跨度> Bar 包之外的类肯定看不到 Bar 类,所以他们不能扩展它。 (如果包内的公共类扩展了它会发生什么......?) Jakson S,您说的完全正确,所有访问级别都按顺序相互包含。 private 允许在类内访问,package-private(默认)允许在包内在类内访问,protected 允许访问其他包 包内的子类,最后 public 允许任何东西访问,因此包括所有其他级别。 Bennett McElwee,受保护的成员保持受保护,除非它们是方法并且被覆盖。但即便如此,它也将是允许访问的覆盖方法。 如果你不想让任何其他类继承,你可以添加public final,这样你就可以使用该类但任何类都可以继承

以上是关于如何保护类,使其在包外不可见的主要内容,如果未能解决你的问题,请参考以下文章

如何保护 QThread 函数,使其在完成之前的工作之前不会再次被调用?

从包外的子类访问受保护的变量

禁止在包外直接扩展 Java 类

使用子类引用访问包外的受保护成员

使用对象时受保护的访问

房上的猫:java中的包