2011-12-11 36 views
18

Tôi có hai lớp mở rộng cùng một lớp trừu tượng. Cả hai đều cần cùng một hằng số, nhưng với các giá trị khác nhau. Tôi có thể làm cái này như thế nào? Một số mã ví dụ để hiển thị những gì tôi muốn làm.Các hằng số ghi đè trong Java

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 
} 

Đoạn mã trên không biên dịch vì CONST không được khởi tạo int class A. Tôi làm cách nào để nó hoạt động? Giá trị của CONST phải là 1 cho tất cả các phiên bản của B và 2 cho tất cả các phiên bản của C và 1 hoặc 2 cho tất cả các trường hợp A. Có cách nào để sử dụng số liệu thống kê cho điều này không?

Trả lời

21

Bạn không thể làm điều đó.

Bạn có thể làm điều này, tuy nhiên:

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

Cảm ơn bạn! Tôi chỉ ước rằng tôi có thể sử dụng tĩnh, bởi vì các giá trị không khác nhau từ một trong những ví dụ của B khác. – Fractaly

+0

@Fractaly: Nhưng chúng thay đổi từ thể hiện của 'A' sang cái khác. –

+1

không nên getConst() trong A trừu tượng? – Fractaly

5

Nếu một hằng số có giá trị thay đổi, nó không phải là một hằng số nữa. Các trường và phương thức tĩnh không đa hình. Bạn cần phải sử dụng một phương pháp công cộng để làm những gì bạn muốn.

Các vấn đề liên quan