Java (10) les classes emboîtées

Transcription

Java (10) les classes emboîtées
u n i v e
P i e r r e
P
a
r
i
Java
(10)
les classes emboîtées
u
m
f
r
a
î
r s i t é
& M a r i e
s
6
d ’ i n f
t
r
i
programmation
o
s
r
m
C u r i e
a
t
i
q
2003
e
e
par
objets
&
méthodologie de mise en œuvre
classes syntaxiquement emboîtées
classes internes « d’instance »
classes internes « de classe »
classes internes nommées
classes locales
classes internes anonymes
attention aux yeux !
java
u
••
#
"
#
"
"
!
!
!
java
2003
"
!
••
"
$
$
!
static
java
2003
class TopLevel {
:
class Inner {
:
}
:
}
TopLevel.Inner
%
Inner
!
%
$
Inner
!
&
'
static
private
java
TopLevel
2003
TopLevel
••
class TopLevel {
private int count = 0 ;
TopLevel♦count
public void makeInner() {
count = count + 1 ;
return new Inner() ;
}
}
class Inner {
String name ;
Inner() { name="Inner" + count; }
}
TopLevel.Inner♦name
}
Inner
#
java
makeInner
TopLevel
#
Inner
2003
TopLevel
Inner
••
class TopLevel {
private int count = 0 ;
TopLevel.this
public Inner makeInner() {
count = count + 1 ;
return new Inner() ;
}
}
top
inn
class Inner {
main
TopLevel top ;
String name ;
Inner() { name="Inner" + count; } top = new TopLevel() ;
}
TopLevel.Inner inn ;
TopLevel.this.count
inn = top.makeInner() ;
}
TopLevel
TopLevel.Inner
"
"
Inner
"
top
makeInner()
"
TopLevel.this
#
"(
java
2003
TopLevel
!
class TopLevel {
private int count = 0 ;
public Inner makeInner() {
count = count + 1 ;
return new Inner( this ) ;
}
}
class Inner {
hidden TopLevel TopLevel_this ;
String name ;
}
}
java
}
Inner( TopLevel creator ) {
TopLevel_this = creator ;
this.name=
"Inner" + TopLevel_this. count ;
TopLevel.this
2003
hidden "
"!
#
(!
$!
%!
&!
'
)
$
*
$
)
"
$
this
"
"
"
*
" )
"
'
&
"
java
2003
"
!
"
••
••
TopLevel
class TopLevel {
private static int count = 0 ;
static class Inner {
String name ;
Inner() {
TopLevel.count ++ ;
this.name =
"Inner" + TopLevel. count ;
}
}
TopLevel.Count
}
TopLevel
inn
#
main
TopLevel.Inner inn ;
inn = new TopLevel.Inner() ;
TopLevel
"
Inner
#
static
#
)#
java
2003
!
••
)
$
$
"
#
$
new
#
#
%
$
&
%
&
"
java
2003
static
'
!
'
"
"
••
class TopLevel {
private String name = "TopLevel" ;
Object mth(){
final String tag = "mth"
class CLocal {
String name = "Clocal" ;
public String toString() {
return name
+ tag
+ TopLevel.this.name;
}
#
Clocal
mth
name
Clocal
#
toString
Object
}
return new Clocal() ;
}
String getNames() {
return mth().toString() ;
}
}
java
TopLevel
#
name
TopLevel
# mth TopLevel
tag
#
2003
"
#
Clocal
••
)
"
#
#
#
! static
+
+
private, protected
#
final
java
2003
public
••
#
(
"
"
,
$
"
"
%
"
java
2003
"
••
abstract class Observer {
String kind ;
Observer,
#String#
Observer(String aKind) {kind = aKind ;}
abstract String getState() ;
getState
#
}
Counter,
getObserver,
class Counter {
private int count ;
Observer getObserver() {
return
Observer
-
{
new Observer("Counter:") {
String getState() {
return kind + count ;
}
}
;
}
}
}
java
2003
%
Observer%
%
,
"
#
"
getState
••
λ étend Observer
abstract class Observer {
String kind ;
λ(String)
getState
λ
#
Observer(String aKind) {kind = aKind ;}
abstract String getState() ;
}
class Counter {
private int count ;
class Counter {
private int count ;
Observer getObserver() {
return
λ(String aKind) { super(aKind) ; }
{
new Observer("Counter:") {
String getState() {
return kind + count ;
}
}
;
}}
}
}
String getState() {
return kind + count ;
}
Observer getObserver() {
return new λ("Counter:") ;
}
}
}
!
java
{
class λ extends Observer {
2003
!
••
new
"
("Counter:")
1
new class λ extends Observer ("Counter:") {
λ( String aKind ) { super(aKind); }
String getState() {
return kind + count ;
}
}
class λ extends Observer
λ( String aKind ) { super(aKind); }
String getState() {
return kind + count ;
}
#
#
3
#
#
new Observer("Counter:") {
String getState() {
return kind + count ;
}
}
3
{
2
'
}
.
java
2003
/
*
••
#
interface IObserver {
String getState() ;
}
#
class Counter {
private int count ;
IObserver getIObserver() {
return
{
new IObserver() {
String getState() {
return "Counter:" + count;
}
}
;
}
}
}
java
2003
&
IObserver
'getState
Counter,
getIObserver,
IObserver
(
%
(
%
"
,
"
#
getState
••
λ
λ
interface IObserver {
String getState() ;
}
#
getState
λ
class Counter {
private int count ;
{
class λ implements IObserver {
IObserver getIObserver() {
return
// λ() { super() ; }
{
new IObserver() {
String getState() {
return "Counter:" + count;
}
}
}}
}
}
IObserver
λ()
class Counter {
private int count ;
;
Object
String getState() {
return "Counter:" + count ;
}
IObserver getIObserver() {
return new λ() ;
}
}
}
"
java
2003
!
••
new
"
()
1
new class λ implements IObserver (){
//λ() { super() ; }
String getState() {
return "Counter:" + count ;
}
}
class λ implements IObserver
//λ() { super() ; }
String getState() {
return "Counter:" + count ;
}
}
.
java
2003
#
#
3
// #
#
new IObserver() {
String getState() {
return "Counter:"+count;
}
}
3
{
2
'
+
# *
/
!
••
)
$
"
$
"
/
0
"
"
0
0
1
Object
"
1
)
&
'
"
!
"
java
2003
"
'
new Nom( … )
;
{
2
"
"
… }
*
*
"
java
2003
',
Nom
"
"
new Nom( … )
••
Nom
Nom

Documents pareils