默认Java类(即非公共、非抽象、非最终、对象的子类)有什么好的用途吗 我已经在C和C++中编程了几年,我第一次使用java类。我读过关于Java类的一章,对Java类的默认声明很好奇:

默认Java类(即非公共、非抽象、非最终、对象的子类)有什么好的用途吗 我已经在C和C++中编程了几年,我第一次使用java类。我读过关于Java类的一章,对Java类的默认声明很好奇:,java,class,oop,design-patterns,Java,Class,Oop,Design Patterns,类Myclass{ //变量和方法 } 我听说这是编译的,但它是否有任何实际用途,例如在任何特定的设计模式或应用程序中 如果重要的话,这是针对Java6的。老了,我知道,但是一个正在工作的项目是基于Java6构建的,这正是促使我学习这一点的原因。当您只希望同一个包中的其他类能够访问这个类时,这是很有用的,并且是限制包中可见的公共类数量的好做法。Java中的默认访问权限是包私有的。这意味着该类仅对同一包中的其他类可见 例如,如果您编写了一个库,并且希望阻止库的用户直接使用不属于API的内部类,那么

类Myclass{

//变量和方法

}

我听说这是编译的,但它是否有任何实际用途,例如在任何特定的设计模式或应用程序中


如果重要的话,这是针对Java6的。老了,我知道,但是一个正在工作的项目是基于Java6构建的,这正是促使我学习这一点的原因。

当您只希望同一个包中的其他类能够访问这个类时,这是很有用的,并且是限制包中可见的公共类数量的好做法。

Java中的默认访问权限是包私有的。这意味着该类仅对同一包中的其他类可见


例如,如果您编写了一个库,并且希望阻止库的用户直接使用不属于API的内部类,那么它非常有用。这允许您在更高版本中更改这些内部类,而不必担心向后兼容性。

当没有称为默认或包专用的可见性标识符时。这种方法的典型用途是使用factory对象。公开工厂及其使用的接口,但将类保留为默认类,以便它们不能在包外“新建”。这将限制其仅通过工厂使用

package pac1.pac2;

public class Factory {
  public FactoryInterface createObject() {
  }
}

package pac1.pac2;

public interface FactoryInterface {
  public void doWork();
}

package pac1.pac2;

class FactoryImpl1 implements FactoryInterface {
  public void doWork() {
    //doing work
  }
}

这是非常简单的,但其思想是您可以使用代码之外的影响(如属性或配置文件)创建所提供接口的对象。因此,您可以有多个
FactoryInterface的实现,并决定在运行时而不是在编译时使用哪些实现。

它实际上是有用途的

考虑下面的包

com.company.modulename.MainEntryPointForModule
com.company.modulename.Class1
com.company.modulename.Class2
当Class1和Class2仅在MainEntryPointFormModule内部使用时,将它们设为默认值是有意义的。这个设计规则实际上可以减少相当大的项目中的混乱程度。

包私有(默认)在您不希望客户访问具体产品时非常有用。它在包级别提供访问控制或一种封装

在下面的UML示例中,客户端无法看到圆形/矩形/多边形类,因为它们受包保护。然而,客户可以看到一个形状。ShapeFactory将允许客户端获取具体形状类的实例,而不必知道它们的详细信息。这是典型的信息隐藏


它类似于一个拥有公共/私有成员的类。在这种情况下,包具有公共的“成员”ShapeFactory和Shape,以及私有的“成员”圆、矩形和多边形。

嗯,是的-创建一个类非常有用,它是特定包的实现细节(因此不应该公开)。为什么它没有用处?关于OO语言的教学方法,最令人伤心的事情之一是缺乏不同级别访问控制的实用示例。默认设置是包保护的,而不是私有的。@markbernard没有包保护这样的东西。有public、protected、package private(默认设置)和private。