2013-10-29 15 views
5

Tôi đã phát hiện ra rằng tôi có thể làm theo cách này trong lớp trẻ:Thay đổi giá trị của các biến Ví dụ lớp cha từ một lớp con

ParentClass.variable = value; 

Nhưng tôi đã được cho biết rằng đó là thực hành tốt hơn để sử dụng được/thiết lập các phương thức và không cho phép truy cập trực tiếp vào các biến bên ngoài một lớp. Mặc dù điều này là khi tôi có một thể hiện của lớp trong một lớp khác, không phải cho các lớp con và các lớp siêu lớp.

Vì vậy, có cách nào tốt hơn để thực hiện việc này và cách nào thường được coi là thực tiễn tốt nhất?

+3

Thực tiễn tốt hơn là sử dụng các phương thức get/set và không cho phép truy cập trực tiếp vào các biến bên ngoài lớp học. – Ingo

+0

điều này dường như có liên quan: http://stackoverflow.com/questions/19658621/update-fields-from-superclass/19658722#19658722 – MadConan

+0

Cân nhắc tạo bộ thu thập được bảo vệ trên phụ huynh. – shmosel

Trả lời

2

Bạn có nhiều tùy chọn.

  1. super.field = x Bạn phải có quyền truy cập vào lĩnh vực này để làm điều này
  2. field = x Bạn phải có quyền truy cập vào lĩnh vực này để làm điều này. Bạn cũng không thể có số khác field ở trẻ em hoặc chỉ trẻ em sẽ được đặt.
  3. setParentField(x) Tôi muốn nói đây là cách tốt nhất thứ hai để thực hiện.
  4. x = callChildMethod() mã này có thể ở cấp độ gốc. Đứa trẻ có triển khai trả về kết quả. Nếu điều này là có thể, đó là cách tốt nhất để làm điều đó. Xem template method pattern
0

Đối với các biến Ví dụ bạn có thể làm như sau trong một phương pháp của một lớp con:

this.variable = value; 

đó là hoàn toàn tốt đẹp. Để sửa đổi các thể hiện của các lớp khác, tốt nhất là sử dụng getters và setters.

Thực sự là bạn nên ngăn các lớp khác thay đổi trực tiếp các biến mẫu; trong trường hợp đó tốt nhất là sử dụng getters và setters. Nhưng trong một lớp con, bạn có thể thay đổi trực tiếp các biến mẫu.

-1

một trong những nguyên tắc OOP là encapsulations có mã thực hành tốt nhất, và có một thành viên tư nhân/các biến, sau đó truy cập chúng bằng setters/getters là cách để đạt được đóng gói.

0

Cách tốt nhất là sử dụng getters và setters. Thêm INFO.

bạn có thể sử dụng,

ParentClass.variable = value; 

Các soltion tốt nhất phụ thuộc vào yêu cầu.

0

Nếu có bất kỳ thành viên riêng trong siêu lớp thì có sử dụng phương thức setter và getter vì chúng tôi không thể sử dụng thành viên riêng trong lớp con của nó.

Và trong trường hợp của bất kỳ thành viên cá thể tĩnh nào bạn có thể trực tiếp sử dụng với sự trợ giúp của tên lớp. Nếu nó là một thành viên cá thể của lớp siêu sau đó cố gắng truy cập/sửa đổi thành viên đó trong lớp con bằng cách sử dụng từ khóa siêu. Bạn có thể sửa đổi với sự trợ giúp của từ khóa này nếu bạn có thành viên thể hiện trong siêu lớp và phân lớp có cùng tên? Sau đó, trong trường hợp này, với việc sử dụng , JVM từ khóa này sẽ truy cập thành viên của cá thể lớp hiện tại, tức là thành viên lớp con.

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