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