|
Postscript, PDF | Didier Rémy | Polytechnique, INRIA |
|
|
||||
|
The Java Language Specification.disponible aussi en HTML
James Gosling, Bill Joy, and Guy Steele.
|
|
Point
); son corps est une liste de déclarations
en nombre et en ordre quelconques:
· | de variables (x ), qui peuvent être introduites
avec une valeur par défaut.
|
· | de constructeurs (Point ), dont le corps est de type
void ; un constructeur est reconnu au fait que son nom est le même que
celui de sa classe et que son type de retour n'est pas indiqué.
|
· | de méthodes (bouge ) dont le corps est arbitraire.
|
class vide{}
est une classe vide sans méthodes
et sans constructeurs.
|
new
suivie d'un
constructeur de classe et de ses arguments, par exemple new Point(3)
.
|
(new Point()).x
retourne 0.
|
this
désigne l'objet en train d'exécuter
cette méthode.
|
|
|
super
désigne la classe parente.
Un constructeur d'une sous-classe doit faire appel à un constructeur de la
classe parente. Cet appel doit être la première instruction. Si ce n'est pas
fait, le compilateur ajoute super()
. Ainsi,
|
|
Point() { ...}
n'était pas défini dans la classe
Point
.)m
dans une classe A
est l'ensemble des définitions de m
dans la classe A
et dans la classe parente.
|
|
Printable
n'est pas une classe. Elle n'a pas
d'implémentation propre. Mais l'interface peut être implémentée (ie.
respectée) par différentes classes.
|
· | effectue des vérifications de typage. |
· | déclare le type des objets de la classe A un sous-type du type de l'interface I. |
Printable
et de leur envoyer des messages.
|
· | Une déclaration de classe
class A extends Bimplements B1, ... Bk
déclare un nouveau type A , et le déclare sous-type de B et de
chaque Bi.
|
· | Une déclaration d'interface
interface Aextends B1, ... Bk
déclare un nouveau type A , et le déclare sous-type de
chaque Bi.
|
|
(A) (v)
où A
est le type cible et v
l'argument. v
est un sous-type de A
, alors le
cast est statique, et il réussit toujours.v
est un sur-type de A
, alors il est
possible que le type dynamique de v
soit en fait plus précis et un
sous-type de A
. Le cast est autorisé, mais il nécessite un test à
l'exécution qui peut échouer. cast
qui peut réussir à l'exécution est permis.(cast)(v)
est rejeté à la compilation, il est toujours
possible de le forcer par (cast)((Object)(v))
, mais ce cast est
certain de produire une erreur à l'exécution (sinon, il n'aurait pas été
rejeté à la compilation)!
|
A
effectue
une conversion implicite vers le type A
pourvu que la valeur soit un
sous-type de B
. Les conversions implicites ne peuvent pas échouer à
l'exécution.
|
cast
:
· | Les conversions statiques, pour changer le comportement d'un programme. En affaiblissant le type statique d'un objet vers le type des objets d'une classe parente, on change la résolution de la surcharge. L'objet se comporte statiquement comme s'il était de la classe parente. |
· | Les conversions dynamiques mais sûrs. Pour pallier une faiblesse du système de typage, il y a des situations où le type statique d'un objet est celui d'un classe parente de sa classe réelle. L'utilisateur peut le savoir (parce qu'il connait le code et peut faire un calcul mental) alors que le compilateur ne sait pas le vérifier statiquement (sans faire de calcul). |
· | Les tests de classes. Lorsque des objets de plusieurs classes sont mis dans un conteneur, à leur retrait, il faut parfois renforcer leur type à l'aide d'une conversion combinée avec un typecase. |
|
|
v instanceofA
permet de tester si l'objet est d'une
sous-classe de la classe A
. v instanceofA
retourne true
si et seulement si
l'expression (A) (v)
ne produira pas d'exception.· | En conjonction avec une conversion, pour recouvrer le vrai type d'un objet qui a été perdu (en général suite au sous-typage). |
· | Seul, pour distinguer des objets de classes différentes (vues sous une même interface compatible.) |
|
|
x
, y
d'un
package P
on utilise la notation pointée P.x
, P.y
, etc. import P.Q.x;
rend visible la déclaration x
du
package P.Q
dans l'unité de compilation sans avoir à utiliser la
notation P.Q.x
. import P.Q.*;
rend visible toutes les déclarations
du package P.Q
dans l'unité de compilation. package P.Q;
rend l'ensemble des déclarations
qui suivent comme une partie du package P.Q
.
|
· | public , ie. visible partout;
|
· | non annoté, ie. visible dans le package (nommé ou annomyme) auquel appartient l'unité de compilation. |
· | private , ie. visible seulement dans la classe dans laquelle il est
défini.
|
· | protected , ie. visible dans le package et dans les sous-classes de
celle dans laquelle il est défini si celle-ci est publique.
|
A
utilisée dans un autre fichier que celui où elle est
définie doit être définie dans un fichier du nom A.java
.
|
C
restent visibles dans la définition de la classe: en particulier dans le
corps de la classe C
un object de la classe C
même autre que
this, expose ses composantes privées. C
) les
composantes privées de C ne sont pas visibles.
Ainsi, le type d'une classe est partiellement abtrait (les méthodes privées
ne sont pas visibles) en dehors de la classe où il est défini.
|
code
n'est pas accessible dans les
objets codés.
|
P/A.java
P/B.java
|
P/C.java
User.java
|
Classe | Importé | Publique | Package | Classe | ||
A | A.y | A | A.x | |||
B | A, A.y | B, B.a | B.m | |||
C | A, A.y, B, B.a, B.m | C | C.b, C.m | |||
User | P.B | User |
m
de la classe B
est protégée dans b.m
. A
de b.a
n'est pas publique dans b.a.y
. m
de la classe User
est celle de la class B
.
Elle est visible dans User
qui est une sous-classe de la classe
B
visible; mais elle n'est pas visible dans un objet de la classe
B
elle-même.Append
.
This document was translated from LATEX by HEVEA and HACHA.