Java 具有已发布Api但具有默认访问构造函数的抽象类

Java 具有已发布Api但具有默认访问构造函数的抽象类,java,java-me,constructor,abstract-class,Java,Java Me,Constructor,Abstract Class,在MIDPAPI中有一个公共抽象类层,这个类发布了一个javadoc,但是它没有在javadoc中显示构造函数。 在同一个api中还有另外两个类Sprite和TiledLayer public class Sprite extends Layer public class TiledLayer extends Layer 所有这些类都在javax.microedition.lcdui.game包中 这意味着层的构造函数具有默认访问权限 我想知道为什么类层的api已经发布,即使它不能在用户代码中

在MIDPAPI中有一个公共抽象类层,这个类发布了一个javadoc,但是它没有在javadoc中显示构造函数。 在同一个api中还有另外两个类Sprite和TiledLayer

public class Sprite extends Layer
public class TiledLayer extends Layer
所有这些类都在javax.microedition.lcdui.game包中

这意味着层的构造函数具有默认访问权限

我想知道为什么类层的api已经发布,即使它不能在用户代码中被子类化?

层的公共接口已经发布,因为即使您不能扩展它,当您以多态方式引用Sprite或TiledLayer的实例时,您仍然可以使用它

换句话说,可以将Sprite的实例视为层的实例,因此了解层的公共接口非常重要,这样您就可以知道可以使用哪些成员。

发布层的公共接口,因为即使您无法扩展它,但在引用时仍然可以使用它Sprite或TiledLayer的多态实例


换句话说,可以将Sprite的实例视为Layer的实例,因此了解Layer的公共接口非常重要,这样您就可以知道可以使用哪些成员。

类的默认构造函数与类本身具有相同的可见性。因为层是公共的,所以它的默认构造函数是公共的,所以它可以直接子类化


类的默认构造函数与类本身具有相同的可见性。因为层是公共的,所以它的默认构造函数是公共的,所以它可以直接子类化


有些对象只能通过调用类工厂方法来获得,而且,您可能已经注意到GameCanvas对象具有可以为您提供层的方法。类工厂的其他示例在XML包中

他们本可以声明Layer final,但Layer被包中的其他类子类化,所以该选项被取消


但是,通常情况下,如果不选择使用final,这只是一种防止子类化的方法。

某些对象只能通过调用类工厂方法获得,并且,您可能已经注意到GameCanvas对象具有将为您提供层的方法。类工厂的其他示例在XML包中

他们本可以声明Layer final,但Layer被包中的其他类子类化,所以该选项被取消


但是,一般来说,如果不选择使用final,这只是防止子类化的一种方法。

很有意义!我认为你一针见血。然而,如果层不是公共的,它会给开发者带来什么问题?我的意思是说,如果类层的javadoc没有发布,它会带来什么问题?就编译而言,没有问题,开发者只会更难知道发生了什么。这是有意义的!我认为你一针见血。然而,如果Layer不是公共的,它会给开发者带来什么问题?我的意思是说,如果类Layer的javadoc没有发布,它会带来什么问题?就编译而言,没有问题,开发者只会更难知道发生了什么。我想知道这是不是它的工作方式,我已经实际尝试过了,NetBeans IDE给出了以下错误层,该层在。。。。无法从包外部访问。即使如此,如果一个构造函数被标记为default,它也有包级别的访问权限,我认为从包外部看不到它。但最近的版本确实如此。这可能会引起一些混乱。@Albert:我读了你在链接中提供的文章,其中提到了默认构造函数,而这篇文章中的问题是关于访问修饰符默认值,这意味着包级访问。我想知道它是否是这样工作的,我已经实际尝试过了,NetBeans IDE给出了以下错误层,该层在。。。。无法从包外部访问。即使如此,如果一个构造函数被标记为default,它也有包级别的访问权限,我认为从包外部看不到它。但最近的版本确实如此。这可能会引起一些混乱。@Albert:我读了你在链接中提供的文章,其中提到了默认构造函数,而这篇文章中的问题是关于访问修饰符默认值,这意味着包级访问。这是Sun的javadoc,疏忽是不可接受的,他们会立即发布一个修订版。这是Sun的javadoc,疏忽是不可接受的,他们会立即发布一个修订版。