Domanda

Io voglio avere la seguente configurazione:

abstract class Parent {
    public static String ACONSTANT; // I'd use abstract here if it was allowed

    // Other stuff follows
}

class Child extends Parent {
    public static String ACONSTANT = "some value";

    // etc
}

Questo è possibile in java? Come? Preferirei non utilizzare le variabili di istanza / metodi se posso evitarlo.

Grazie!

EDIT:

La costante è il nome di una tabella di database. Ogni oggetto bambino è un mini ORM.

È stato utile?

Soluzione

Non si può fare esattamente come si desidera. Forse un compromesso accettabile potrebbe essere:

abstract class Parent {
    public abstract String getACONSTANT();
}

class Child extends Parent {
    public static final String ACONSTANT = "some value";
    public String getACONSTANT() { return ACONSTANT; }
}

Altri suggerimenti

In questo caso si deve ricordare è in java non si può overried metodi statici. Quello che è successo è di nascondere la roba.

secondo il codice che avete messo se fate le seguenti cose risposta sarà nullo

Parent.ACONSTANT == null ; ==> true

Parent p = new Parent(); p.ACONSTANT == null ; ==> true

Parent c = new Child(); c.ACONSTANT == null ; ==> true

fino a quando si usa Parent come tipo di riferimento ACONSTANT sarà nullo.

ti permette di fare qualcosa di simile.

 Child c = new Child();
 c.ACONSTANT = "Hi";
 Parent p = c;
 System.out.println(p.ACONSTANT);

Output sarà nullo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top