2011-12-11 17 views
18

Aynı soyut sınıfı genişleten iki sınıfa sahibim. Her ikisi de aynı sabite, ama farklı değerlere ihtiyaç duyarlar. Bunu nasıl yapabilirim? Ne yapmak istediğimi göstermek için bazı örnek kod.Java'da Sabitleri Geçersiz Kılma

abstract class A { 
    public static int CONST; 
} 

public class B extends A { 
    public static int CONST = 1; 
} 

public class C extends A { 
    public static int CONST = 2; 
} 

public static void main(String[] args){ 
    A a = new B(); 
    System.out.println(a.CONST); // should print 1 
} 

Yukarıdaki kod, CONST başlangıç ​​int sınıfı A olmadığı için derleme yapmıyor. Bunu nasıl çalıştırabilirim? CONST değeri, B'nin tüm örnekleri için 1, C'nin tüm örnekleri için 2, A'nın tüm örnekleri için 1 veya 2 olmalıdır. Bunun için statiğin kullanılmasının herhangi bir yolu var mı?

cevap

21

Bunu yapamazsınız.

Bununla birlikte, bunu yapabilirsiniz: Sabit değişken değeri vardır

abstract class A { 
    public abstract int getConst(); 
} 

public class B extends A { 
    @Override 
    public int getConst() { return 1; } 
} 

public class C extends A { 
    @Override 
    public int getConst() { return 2; } 
} 

public static void main(String[] args){ 
    A a = new B(); 
    System.out.println(a.getConst()); 
} 
+0

Teşekkür ederiz! Sadece statik kullanabilmeyi diliyorum, çünkü değerler B örneğinin diğerinden farklı değildir. – Fractaly

+0

@Fractaly: Ancak, "A" örneğinden diğerine farklılık gösteriyorlar. –

+1

, A özetinde getConst() yöntemini kullanmamalıdır? – Fractaly

5

ise, sabit artık değil. Statik alanlar ve yöntemler polimorfik değildir. İstediğiniz şeyi yapmak için kamu yöntemini kullanmanız gerekir.