Vad kännetecknar en god klass F12 Nested & En odelad, väldefinierad abstraktion Uppgiften kan beskrivas kort och tydlig Namnet är en substantiv eller adjektiv som beskriver abstraktionen på ett adekvat sätt Har ett koncist och sammanhängande gränssnitt 417 Vad kännetecknar en god klass I dagsläget kan vi ha följande samband mellan klasser, tillhör samma paket eller arv Har tillstånd och beteende Representerar en mängd möjliga run-time objekt Problemet ska delas upp i lämpliga klasser Cohesion och Coupling (sammanhörighet och koppling) Metoderna i varje klass ska ha stark sammanhörighet Klasserna ska vara löst kopplade (oberoende av varann) SomeClass SomeChild Class ClassA ClassB ClassC 418 Organisera klasser inuti varandra/nested Classes A static inner class is a nested class which is a static member of the outer class. Works as top-level classes just like package Inner classes are a security mechanism in Java. An inner class can be made private, protected, public. A class within a method and this will be a local type. An inner class declared without a class name is known as an anonymous inner class. public class ShortTest public int aval; protected int bval; private int cval; static public class Inside public void demo() int a = aval; a = bval; c = cval;
ShortTest.Inside s = new ShortTest.Inside(); Varför Nested Static classes? Fungerar ju som vanliga paket, dvs klasserna ligger ju var för sig. Om man vill ha en uppbyggnad där klasserna ligger mer inuti varandra Hur gör man då? Varför vill man ha det så? Jan Erik Moström Inner classes Klassen existerar i objekten som tillhör en annan klass Varför??? Adaptor Tre varianter Member inner Local inner Anonymous inner Abstrakta klasser som implementerar alla metoder i ett interface men tomma MetodA(Type param) Tex MouseAdapter... men trassla inte till saker i onödan public class ShortTest public int aval; protected int bval; private int cval; public class Inside public void demo() int a = aval; a = bval; a = cval; OK ShortTest st = new ShortTest(); ShortTest.Inside s = st.new Inside();
Skuggning av namn När vi har två hierarkier Inneslutning Arv class Outer extends Parent void setx( int value) x=value; public class Parent 0 i.setx(50); class Outer extends Parent void setx( int value) this.x=value; 0 i.setx(50); public class Parent class Outer extends Parent void setx( int value ) Outer.this.x = value; 50 public class Parent i.setx(50); Anonyma klasser Har inget namn!!! En-gångs klasser Implementerar ofta ett enkelt interface new public void somemethod() // bla bla new SomeExistingClassInterface() public void somemethod() // bla bla
Ingen konstruktor public Coordinates getcoord() final int methodval = 0; return new Coordinates() private int xval; private int yval; public int xcoordinate() return xval; public int ycoordinate() return yval; public String tostring() return x = + xval + y = + yval + methodval; ; public Coordinates getcoord() final int methodval = 0; return new Coordinates() private int xval; private int yval; ; public int xcoordinate() return xval; public int ycoordinate() return yval; public String tostring() return "x = " + xval + " y = " + yval + methodval; xval = 100; yval = 120; Lokala klasser public class Top class Minor int val; public void somemethod () class SomeClass Organisera klasser inuti varandra A static inner class is a nested class which is a static member of the outer class. It can be accessed without instantiating the outer class, using other static members. Just like static members, a static nested class does not have access to the instance variables and methods of the outer class. Inner classes are a security mechanism in Java. We know a class cannot be associated with the access modifier private, but if we have the class as a member of other class, then the inner class can be made private. In Java, we can write a class within a method and this will be a local type. Like local variables, the scope of the inner class is restricted within the method. A method-local inner class can be instantiated only within the method where the inner class is defined An inner class declared without a class name is known as an anonymous inner class. In case of anonymous inner classes, we declare and instantiate them at the same time. Generally they are used whenever you need to override the method of a class or an interface. It is an expression. När ska man använda För att organisera koden för ökad läsbarhet. Tips Använd lokala klasser bara för små enkla klasser då koden annars blir väldigt svårläst Ökad läsbarhet, ökad inkapsling, ökad säkerhet genom privata klassers Ökad inkapsling och ökad säkerhet, minskad läsbarhet För att implementera CallBacks och adaptrar i Java
Bra länkar http://www.tutorialspoint.com/java/java_innerclasses.htm innerclasses.html anonymousclasses.html localclasses.html http://skillgun.com/java/misc/interview-questions-andanswers/paper/180 440