2013-03-24 26 views
5

Tôi biết rằng nếu tôi có nhiều thể hiện của lớp cùng tất cả chúng đều sẽ chia sẻ các biến cùng lớp, vì vậy các thuộc tính tĩnh của lớp sẽ sử dụng một số tiền cố định bộ nhớ không có vấn đề như thế nào nhiều ví dụ của lớp tôi có.Biến tĩnh Java và thừa kế và Memory

Câu hỏi của tôi là: Nếu tôi có một vài lớp con kế thừa một số trường tĩnh từ lớp cha của chúng, chúng có chia sẻ các biến lớp hay không?

Và nếu không, việc thực hành/mô hình tốt nhất để đảm bảo rằng họ chia sẻ các biến cùng lớp là gì?

Trả lời

15

Nếu tôi có một vài lớp con kế thừa một số trường tĩnh từ lớp con , chúng có chia sẻ các biến lớp hay không?

Có Họ sẽ chia sẻ cùng một biến lớp trong suốt Ứng dụng đang chạy hiện tại trong một Trình nạp lớp đơn.
Ví dụ xem xét mã đưa ra dưới đây, điều này sẽ cung cấp cho bạn ý tưởng hợp lý của việc chia sẻ biến lớp học bằng cách mỗi lớp con của nó ..

class Super 
{ 
    static int i = 90; 
    public static void setI(int in) 
    { 
     i = in; 
    } 
    public static int getI() 
    { 
     return i; 
    } 
} 
class Child1 extends Super{} 
class Child2 extends Super{} 
public class ChildTest 
{ 
    public static void main(String st[]) 
    { 
     System.out.println(Child1.getI()); 
     System.out.println(Child2.getI()); 
     Super.setI(189);//value of i is changed in super class 
     System.out.println(Child1.getI());//same change is reflected for Child1 i.e 189 
     System.out.println(Child2.getI());//same change is reflected for Child2 i.e 189 
    } 
} 
6

Tất cả các trường hợp mà lớp hoặc sub-class cổ phiếu các lĩnh vực tĩnh cùng cho trình nạp lớp đã cho.

Lưu ý: nếu bạn nạp cùng lớp nhiều lần trong nhiều bộ tải lớp, mỗi bộ nạp lớp có nó bản sao riêng của lĩnh vực tĩnh.

0

Có tất cả các hệ thống phân cấp lớp (cùng lớp và tất cả các trường lớp trẻ) chia sẻ các biến tĩnh như vậy. Vì JAVA không hỗ trợ biến toàn cục nhưng bạn có thể sử dụng biến tĩnh dưới dạng biến Toàn cầu mà không vi phạm các khái niệm OOP.

Nếu bạn thay đổi giá trị của biến tĩnh từ một trong những lớp học, cùng giá trị thay đổi nhân rộng đến tất cả các lớp có sử dụng biến này.

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