2013-03-11 36 views
6

Tôi có rất nhiều lớp con của lớp trừu tượng và mỗi trường trong số đó khai báo trường cuối cùng công khai có cùng tên. Tôi đã nghĩ đến việc có trường này trong lớp cha trừu tượng mà không khởi tạo nó và hy vọng rằng mỗi phân lớp sẽ buộc phải khởi tạo nó. Tôi đã nghĩ về điều này bởi vì tất cả các lớp con của lớp trừu tượng đều khai báo một trường String cuối cùng được gọi là UNIQUE_ID, và nó là cần thiết cho mọi phân lớp để khai báo một trường với tên chính xác như vậy.trường tĩnh công khai trong lớp trừu tượng hoặc giao diện

Tôi hy vọng câu hỏi của tôi đủ rõ ràng, nếu không, vui lòng cho tôi biết như vậy.

Có thể điều gì đó tương đương hoặc ít hơn tương đương với việc này sẽ được thực hiện?

EDIT: Mã nói thêm:

lớp trừu tượng của tôi trông giống như:

public abstract class ExperimentPanelModel extends Panelizable { 
protected String nextButtonText; 
protected String backButtonText; 
protected String skipButtonText; 
protected Properties currentFile; 
protected List<Properties> pastFiles = new ArrayList<Properties>(); 

public ExperimentPanelModel(Properties argcurrentfile, List<Properties> argpastfiles) { 
    currentFile = argcurrentfile; 
    pastFiles = argpastfiles; 
    nextButtonText = "Next"; 
    backButtonText = "Back"; 
    skipButtonText = "Skip"; 
} 
... 
} 

Một số các lớp con không trừu tượng của cái nhìn lớp trừu tượng như (lưu ý rằng tất cả trong số họ tuyên bố public static final String UNIQUE_ID) :

public class ConfigurationGUI extends ExperimentPanelModel { 

public static final String UNIQUE_ID = "ConfigurationGUI"; 
public static final String DATA_MODIFIED = "DataModified"; 

Date dateOfLastSession; 
int ExperimentalSession; 
int ExperimentOrder; 

boolean nextButtonEnabled = false; 

public ConfigurationGUI(Properties argcurrentfile, List<Properties> argpastfiles) { 
    super(argcurrentfile, argpastfiles); 
    nextButtonText = "Confirm"; 
    backButtonText = "Abort"; 
} 

... 
} 

Một ví dụ khác:

public class Introduction extends ExperimentPanelModel { 

public static final String UNIQUE_ID = "Introduction"; 
public static final String INSTRUCTIONS_XML_FILE = "instructions.xml"; 
public static final String THIS_INSTRUCTION_PROPERTY = UNIQUE_ID; 

private String thisInstructionText = UNIQUE_ID; 

Properties readInstructionsProperties = new Properties(); 

public Introduction(Properties argcurrentfile, List<Properties> argpastfiles) { 
... 

Và mới nhất:

public class Instruction1 extends ExperimentPanelModel { 

public static final String UNIQUE_ID = "Instruction1"; 
public static final String INSTRUCTIONS_XML_FILE = "instructions.xml"; 
public static final String THIS_INSTRUCTION_PROPERTY = UNIQUE_ID; 
... 
} 
+1

Vui lòng thêm đoạn mã để làm cho câu hỏi này rõ ràng hơn! – ppeterka

+1

đăng một số mã xin vui lòng –

+1

hy vọng câu trả lời của tôi là hữu ích. không chắc chắn có một bản sửa lỗi nhanh hơn tốt hơn so với triển khai hiện tại. về lâu dài, chuyển từ các trường tĩnh sang một cấu trúc dữ liệu riêng biệt theo dõi siêu dữ liệu có thể là một cải tiến. –

Trả lời

8

Ý tưởng trường sẽ không làm việc, bởi vì các trường tĩnh không thể được ghi đè trong các lớp con. Những gì bạn có thể làm là bạn có thể khai báo một phương thức trừu tượng trên lớp trừu tượng để các lớp con của bạn phải thực hiện nó.

Cũng lưu ý rằng bạn không thể làm cho nó trở thành phương pháp tĩnh bởi vì những người đó cũng không bị ghi đè.

1

Đặt trường chung cuối cùng UNIQUE-ID trong lớp trừu tượng và khai báo một hàm tạo được bảo vệ nhận giá trị cho UNIQUE-ID. Bạn sẽ không thể làm cho nó tĩnh mặc dù các giá trị được yêu cầu phải khác nhau cho các trường hợp khác nhau.

+0

Câu trả lời ở trên là tốt hơn nhiều :-) – GHC

3

Trong trường hợp của bạn, tôi sẽ xác định biến trong tổ tiên. Không có điểm trong việc có một biến trong mỗi lớp mở rộng, trừ khi bạn có một lý do đặc biệt tốt, mà bạn không có âm thanh như có.

+1 cho trả lời của Nathan. Trong một vài trường hợp, đó là một điều tốt hơn để làm.

+0

cảm ơn, tôi đã đọc câu hỏi có nghĩa là trường phải nhận một giá trị khác nhau trong mỗi phân lớp. câu hỏi không rõ ràng lắm. –

+0

Vâng, vấn đề là câu hỏi không được xây dựng tốt. – carlspring

+0

Nathan Hughes đọc đúng. Tôi vừa thêm một số mã, tôi hy vọng nó rõ ràng hơn bây giờ. – deinocheirus

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