2009-09-26 4 views
1

Dans l'API MIDP, il y a un public abstract class Layer, cette classe a un javadoc publié mais ne montre pas de constructeur dans le javadoc. Dans la même API, il existe deux autres classes Sprite et TiledLayer.classe abstraite avec constructeur d'accès Api mais par défaut publié

public class Sprite extends Layer 
public class TiledLayer extends Layer 

Toutes ces classes sont dans le paquet javax.microedition.lcdui.game

Cela signifie que le constructeur de la couche a un accès par défaut.

Je me demande pourquoi l'API de la class Layer a été publiée même si elle ne peut pas être sous-classée en code utilisateur?

+0

Pourrait-il y avoir un oubli? –

+0

C'est le javadoc de Sun, les oublis y sont inacceptables, ils auraient immédiatement publié une version révisée. –

Répondre

4

L'interface publique de Layer est publiée car même si vous ne pouvez pas l'étendre, vous pouvez toujours l'utiliser lorsque vous référencez une instance de Sprite ou TiledLayer de façon polymorphe.

En d'autres termes, il est possible de traiter une instance de Sprite comme une instance de Layer, et en tant que tel il est important de connaître l'interface publique de Layer afin que vous sachiez ce que les membres disponibles pour travailler.

+0

Ça a du sens! Je pense que vous frappez le clou sur la tête. Cependant, au cas où le calque ne serait pas public, quels problèmes aurait-il causé aux déveilleurs? –

+0

Je voulais dire si le javadoc de la couche de classe n'était pas publié quels problèmes cela aurait-il causé? –

+1

Aucun problème en ce qui concerne la compilation, il serait plus difficile pour les développeurs de savoir ce qui se passait. –

0

Le constructeur par défaut d'une classe a la même visibilité que la classe elle-même. Puisque le calque est public, son constructeur par défaut est public, donc il peut être sous-classé directement.

http://java.sun.com/docs/books/jls/third_edition/html/classes.html#8.8.9

+0

Je me demande si c'est ainsi que cela fonctionne, je l'ai essayé pratiquement et l'EDI NetBeans donne l'erreur suivante "Layer() n'est pas public dans .... et ne peut pas être accédé depuis un paquet extérieur". Evenso si un constructeur est marqué par défaut il a un accès au niveau du paquet et je ne pense pas qu'il sera visible de l'extérieur du paquet. –

+0

Les anciennes versions de JavaDoc ne documentaient pas le constructeur par défaut (synthétique). Mais les versions plus récentes font. Cela peut causer une certaine confusion. –

+0

@Albert: J'ai lu l'article que vous avez fourni dans le lien et il parle de "constructeur par défaut" alors que la question dans ce billet concerne le modificateur d'accès "default" qui signifie l'accès au niveau du paquet. –

1

Certains objets ne peuvent être obtenus en appelant les méthodes d'usine de classe (et, sans doute, vous avez remarqué que les objets GameCanvas ont des méthodes qui vous donneront des couches). D'autres exemples d'usines de classe sont dans le package XML.

Ils auraient pu déclarer Couche finale mais Couche est sous-classée par les autres classes du package et cette option était donc désactivée. Mais, en général, c'est juste un moyen d'empêcher le sous-classement (si l'utilisation de final n'est pas une option).