2010-10-12 6 views
4

Je veux avoir la configuration suivante:Hériter une variable statique en Java

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 
} 

Est-ce possible en java? Comment? Je préfère ne pas utiliser les variables d'instance/méthodes si je peux l'éviter.

Merci!

EDIT:

La constante est le nom d'une table de base de données. Chaque objet enfant est un mini ORM.

+4

Hors sujet, mais pourquoi utiliser un langage de programmation orienté objet si vous voulez éviter la partie orientée objet? –

+0

mais qu'essayez-vous de réaliser? Ne pas créer un obj pour la classe Child?, Créer statique est tout aussi cher. – zengr

+0

Pouvez-vous donner un exemple de comment vous pourriez * utiliser * cela? –

Répondre

18

vous ne pouvez pas le faire exactement comme vous le souhaitez. Peut-être un compromis acceptable serait:

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

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

C'est génial! Merci! – SapphireSun

+0

Et s'il y a plusieurs sous-classes? Existe-t-il une façon plus simple de faire cela que de copier-coller la même méthode getACONSTANT() dans chaque sous-classe? – Chiubaka

+0

@ChiuBaka - crée une classe d'adaptateur, c'est-à-dire qui implémente la méthode, puis étend la classe de l'adaptateur. http://stackoverflow.com/questions/10170698/what-is-adapter-class –

2

Dans ce cas, vous devez vous rappeler est en Java, vous ne pouvez pas surestimer les méthodes statiques. Qu'est-il arrivé, c'est cacher les choses.

selon le code que vous avez mis si vous faites les choses suivantes réponse sera nulle

Parent.ACONSTANT == null ; ==> true 

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

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

aussi longtemps que vous utilisez Parent comme ACONSTANT type de référence sera nulle.

faites quelque chose comme ça.

La sortie sera nulle.

+0

Whoa, cool exemple. Merci d'avoir pris le temps de poster ça :-) +1 – SapphireSun

Questions connexes