2012-01-06 38 views
5

Nếu bạn kế thừa từ một hoạt động mà một số biến thành viên được khai báo, làm thế nào để bạn truy cập vào các biến thành viên này trong lớp con thực hiện kế thừa?Truy cập các biến lớp kế thừa trong java

+0

Đồng thời kiểm tra xem bạn không có xung đột đặt tên: http://java.sys-con.com/node/46344 nếu bạn đang gặp phải hành vi không mong muốn – jefflunt

Trả lời

7

public hoặc protected tên thành viên có thể được truy cập qua this.memberName từ bất kỳ phương thức khởi tạo nào hoặc phương thức khởi tạo không static hoặc trình khởi tạo.

private hoặc thành viên cấp gói (truy cập từ phân lớp trong gói khác) không thể truy cập trực tiếp và sẽ cần truy cập thông qua giao diện không có đặc quyền chẳng hạn như public getter.

2

Nếu các thành viên được khai báo private hoặc nếu họ được khai báo với quyền truy cập mặc định (gói) và lớp con của bạn ở một lớp khác, bạn không thể truy cập các biến. Nếu người truy cập được cung cấp, bạn có thể sử dụng chúng. Nếu không, chúng không thể truy cập được.

Nếu các thành viên đã được tuyên bố protected hoặc public, sau đó bạn truy cập chúng như thể chúng được khai báo trong lớp của riêng bạn (this.var, hoặc chỉ var nếu không có sự mơ hồ). Nếu bạn có một thành viên trong phân lớp có cùng tên với lớp cha, bạn có thể sử dụng super.var để truy cập biến siêu lớp.

+0

Dịch vụ chăm sóc người điều hành có giải thích không? –

+1

+1 để chống lại cuộc bỏ phiếu không giải thích được. – mre

4
class A { 
    protected int a = 3; 
} 

class B extends A { 
    protected int b = 2; 

    void doIt() { 
     System.out.println("super.a:" + super.a); 
     System.out.println("this.b: " + this.b); 
    } 
} 
+0

Bạn không cần từ khóa 'super'. – mre

+1

Đúng vậy. Nhưng đây là một câu hỏi mới bắt đầu. Vì vậy, tôi muốn làm cho nó hoàn toàn rõ ràng. – ollins

+2

Bạn chỉ cần từ khóa 'super' nếu trường được ẩn bởi một trường trong lớp con. –

1

Như được người khác nói, các trường công cộng và được bảo vệ có thể truy cập thông qua this.field từ lớp con. Các trường riêng tư của gói cũng có thể được truy cập theo cùng một cách, nhưng chỉ khi lớp con nằm trong cùng một gói với cha mẹ.

Không thể truy cập các trường riêng tư theo cách này, nhưng chúng có thể được truy cập bằng cách sử dụng Java reflection, nếu cài đặt bảo mật cho phép. Nó thường không được khuyến khích thực hành (các thành viên tư nhân thường là tư nhân vì một lý do), nhưng nó có thể hữu ích trong một số trường hợp, ví dụ truy cập các thành viên lớp riêng cho mục đích kiểm tra mã. Xem the answers to this question để biết cách sử dụng phản chiếu theo cách này.

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