2012-05-03 18 views
5

Tôi có lớp trừu tượng và 2 lớp con. Có 4 hằng số liên quan đến tất cả các lớp. Tôi sẽ đặt các trận chung kết trong lớp trừu tượng nhưng tôi hiểu một biến cuối cùng không được kế thừa? Tôi có phải định nghĩa hằng số trong mọi lớp (có vẻ không hiệu quả) không? Hoặc chỉ làm cho hằng số một biến tức thời (không giống như một ý tưởng tốt)?Java- Sử dụng hằng số trong lớp trừu tượng cần được sử dụng bởi các lớp con cũng như

Tôi có thể làm gì để giải quyết vấn đề này?

Trả lời

10

Sau đây sẽ có sẵn cho tất cả các lớp con của bạn nếu được xác định trong lớp trừu tượng.

public static final Integer MYCONSTANT = 42; 

hoặc

static final Integer MYCONSTANT = 42; 

hoặc

protected static final Integer MYCONSTANT = 42; 

thứ hai (gói tin) chỉ dành cho các lớp học trong cùng một gói. Thứ ba (được bảo vệ) sẽ có sẵn cho tất cả các lớp con không phụ thuộc vào gói của chúng.

+0

Tôi chưa thử nhưng tôi chắc chắn rằng thứ hai chỉ giữ nếu lớp con nằm trong cùng một gói. –

+0

@AngeloNeuschitzer Đúng vậy. – Martin

+1

Sau đó, bạn nên viết nó theo cách đó, OP dường như là người mới bắt đầu và có thể bị nhầm lẫn. –

2

Hằng số được kế thừa bởi trẻ em. Bạn chỉ cần đảm bảo có chúng protected hoặc public để trẻ có thể truy cập chúng.

abstract class A { 
    protected final static String FOO = "bar"; 
} 
class B extends A { 
    somemethod() { 
     System.out.println("foo: " + FOO); 
    } 
} 

có thể được truy cập từ lớp và tất cả các con của nó.

+1

Từ những gì tôi đã được bảo vệ bằng cách sử dụng chương trình được bảo vệ là "lười" và không nên sử dụng. – spaz

+2

@spaz: ở đây chúng ta nói về khả năng hiển thị của các hằng số - đây không phải là sự thừa kế thực sự. Bạn cũng có thể tạo ra một lớp 'Constants', cho đến nay tôi đã nhìn thấy nó trong tất cả các dự án của tôi. Btw: gọi 'bảo vệ' khả năng hiển thị 'lười biếng' là vấn đề ... tất cả phụ thuộc vào nhu cầu của bạn. – home

+0

@spaz phụ thuộc vào ngữ cảnh. đối với biến 'final' có thể truy cập được bởi lớp riêng của nó và con của nó là cách hoàn hảo để làm công cụ. Vì vậy, ... cho thực ... tại sao nên bit được 'lười biếng' lập trình, dù sao? Và những gì nên được sử dụng thay thế? –

0

Có. Nhưng vì chúng là hằng số nên là final and static, static modifier làm cho nó sẽ chỉ có một 'bản sao' và nếu điều này sẽ chỉ được sử dụng trong lớp con, thì bạn có thể sử dụng protected hoặc nếu từ các lớp khác quá phải làm cho nó public.