06. oktober 2003 - 18:30Der er
34 kommentarer og 1 løsning
gøre min kode lidt mere smart
Hej jeg har 4 forskellige klasser P1,P2,P3 og P4. De bruger alle sammen de samme metoder der laver set og get på forskellige variabler i klasserne. F.eks har jeg denne kode i alle mine klasser: Måske kan jeg lave noget polymorfi ??
public class P1 {
public int identifier = 10;
public int getIdentifier() { return identifier; }
public void SetIdentifier(int id) { this.identifier = id; } }
Når nu din variabel 'identifier' er public er der vel egentlig slet ikke nogen grund til at lave get- og set- metoder til at få adgang til den med. dvs istedetfor int hansIdentifyer = instansAfP1.getIdentifyer(); kan du blot skrive int hansIdentifyer = instansAfP1.identifyer;
jakoba -> korrekt, men det er nu pænere design hvis den bliver private (protected)
Synes godt om
Slettet bruger
06. oktober 2003 - 18:40#5
JakobA: Det er vel ikke pænt at give direkte adgang til variablerne i en klasse. Den pæne løsning er vel at gøre variablen private, og lade public metoder der kun tillader de operationer du øsnker på variablen.
Jeg forstår ikke helt pointen i at lade metoderne være protected - det giver da ikke samme funktionalitet.
Synes godt om
Slettet bruger
06. oktober 2003 - 18:41#7
Polymorfi vil sige at have flere metoder med samme navn, men med forskellige argumenter. Det burde ikke være nødvendigt hvis du bare vil dele fælles metoder.
public class P { private int identifier = 10; public int getIdentifier() { return identifier; } public void SetIdentifier(int id) { this.identifier = id; } }
P1.java:
public class P1 extends P { ... }
må være det rigtige.
Evt. kan member være protected, hvis den skal bruges direkte af metoder i Px.
public selvfølgelig, når de er public i før synes jeg at det er mest logisk at de også er public bagefter - ellers har man da ændret funktionaliteten voldsomt.
i dine klasser sætter du så en konstantværdi i 'variableIDenneKlasse' med nabnene på de variabler der skal kunne nås i den klasse. og naver en enkelt get- og set- funktion med en svitch statement i:
class EnAfDineKlasser extends TilgaaVariable {
private int identifier1; private int tanteOda; private int identifier2; // disse 3 skal kunne tilgås
public EnAfDineKlasser() String variableIDenneKlasse = "|identifier1 |tanteOda |identifier2 |"; // plus hvad ellers constructoren skal lave. }
public int getInt( String name ) { switch ( findVariabelIndex( navn ) ) { case 0: return this.identifier1; case 1: return this.tanteOda; case 2: return this.identifier2; default: { // kast en exeption eller System.out.println( "Der er ingen variabel med navnet '" +navn +" i denne klasse." ); return 0; } }
og ligesådan laver du en set metode.
}
udefra kan du så finde værdien at 'tanteOda' med int hansIdentifyer = instansAfP1.getInt("tanteOda");
og andre klasser kan så lave med de samme eller andre variable som du vil.
jakoba>> jeg kan godt se hvor du vil hen, men synes nu godt koden er en smule grum. Jeg kan ikke engang extende en super klasser, hvor hver klasse P1 .. P4, har hver deres egen variabel som skal skrives til. Hvis jeg extendede vil der jo kun være 1 variabel og ikke 4 som jeg skal bruge. Nå men vil ligge rode lidt med din kode.
arne V>> ja det er rigtigt, men getIndentifier() og setIdentifier(), læser og skriver variabler i 4 forskellige klasser. Men metoderne jeg har implementeret i de 4 klasser er ens. Den eneste forskel , at hver klasse har en variabel som skal skrives i selve klassen
arne>> jo men. Lad os nu antage at jeg først kalder metoden setIdentifier() fra min klasse P1 Så skriver jeg i variablen private int identifier. Senere kalder min klasse p2 metoden setIdentifier() som også skriver i variablen identifier og det dur jo ikke for så overskrives variablen identifier
public class Arv { public static void main(String[] args) { P o1 = new P1(); o1.setIdentifier(1); P o2 = new P2(); o2.setIdentifier(2); P o3 = new P1(); o3.setIdentifier(3); System.out.println(o1.getIdentifier()); System.out.println(o2.getIdentifier()); System.out.println(o3.getIdentifier()); } }
class P { private int identifier; public int getIdentifier() { return identifier; } public void setIdentifier(int id) { identifier = id; } }
public class Arv { public static void main(String[] args) { P o1 = new P1(); P o2 = new P2(); P o3 = new P1(); System.out.println(o1.getIdentifier()); System.out.println(o2.getIdentifier()); System.out.println(o3.getIdentifier()); } }
class P { private int identifier; public P(int id) { identifier = id; } public int getIdentifier() { return identifier; } }
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.