2012-02-25 31 views
9

Tôi đã làm việc với android trong một vài năm nay, không một lần tôi có một giáo viên hoặc bất cứ ai cho tôi biết phải làm gì. Toàn bộ thời gian này tôi đã tự hỏi bản thân mình điều này.Trong Java, điều gì sẽ xảy ra khi bạn có một phương pháp với từ khóa hiển thị không xác định?

Khi bạn có một phương pháp tôi thường thấy ...

public void method(){ 
//Stuff 
} 

hoặc

private void method(){ 
//stuff 
} 

Tôi biết rằng một khoảng trống là một phương pháp không có giá trị trả về, và công chúng đó là khả năng hiển thị của phương pháp theo một cách nào đó nhưng có vấn đề gì nếu tôi chỉ sử dụng một cái gì đó như thế này ...

void method(){ 
//stuff 
} 

Bởi vì sau đó là meth ods khả năng hiển thị sẽ chỉ được mặc định anyway?

Tôi không biết mình có đúng hay không, đó có phải là cách hay để chỉ định "công khai" hoặc "riêng tư" không?

+1

Tôi không chắc mình có hiểu câu hỏi hay không. Nếu bạn muốn phương thức được công khai, bạn cần chỉ định công khai. Nếu bạn muốn nó là riêng tư, bạn cần phải xác định riêng tư. Và nếu bạn muốn mặc định (nghĩa là khả năng hiển thị gói), bạn chỉ định không có gì. – sepp2k

Trả lời

17

Không xác định bất cứ điều gì có ý nghĩa cụ thể:

  • public - bất kỳ lớp có thể truy cập vào diễn đàn này
  • protected - lớp con có thể truy cập diễn đàn này (cũng như mã trong cùng lớp hoặc trong cùng một gói)
  • private - chỉ mã trong cùng lớp có thể truy cập vào diễn đàn này
  • gì ("mặc định" truy cập) - chỉ mã trong cùng gói thể acc viết thành viên này

Có thể cho rằng trường hợp cuối cùng phải có từ khóa riêng, nhưng bây giờ chúng tôi đã bị mắc kẹt. Trừ khi bạn thực sự có ý nghĩa để sử dụng khả năng hiển thị mặc định, nó là hình thức nghèo để không chỉ định bất cứ điều gì - bạn có thực sự cần khả năng hiển thị gói cho một số lý do, hoặc bạn chỉ mặc định để hiển thị gói cho tất cả mọi thứ? Thực hành tốt nhất là sử dụng rõ ràng private cho các thành viên ngoài công lập trừ khi bạn cần một trong những người khác.

+0

Không, tôi thực sự không biết, không phải là tôi lười biếng hay gì cả, nhờ đó, tôi chỉ muốn biết thực hành tốt nhất, tôi sẽ chấp nhận câu trả lời trong 9 phút – FabianCook

+1

@SmartLemon, tôi không thực sự buộc tội bạn lười biếng, chỉ có ai đó đọc mã của bạn sau đó sẽ không biết ngay nếu bạn _really_ có nghĩa là có khả năng hiển thị gói nếu bạn chỉ sử dụng nó theo mặc định ở mọi nơi :) – bdonlan

+1

Nói đúng câu trả lời này không thực sự chính xác. bảo vệ có nghĩa là nhiều hơn thế này. Mỗi cấp độ là một bộ siêu nghiêm ngặt của trước đó, có nghĩa là một phương thức được bảo vệ có thể được sử dụng bởi cả hai lớp con và cũng bởi các mã khác trong cùng một gói. –

6

Java có bốn mức độ hiển thị: công khai, được bảo vệ, (mặc định), riêng tư. Ý nghĩa của những điều này như sau:

  1. công khai - làm cho các phương pháp của bạn có thể truy cập được vào bất kỳ lớp nào khác.
  2. được bảo vệ - làm cho các phương thức của bạn có thể truy cập được đối với bất kỳ lớp nào trong cùng một gói HOẶC bất kỳ lớp con nào trong lớp của bạn.
  3. (mặc định, nghĩa là không có công cụ sửa đổi) - làm cho các phương thức của bạn chỉ truy cập được vào các lớp trong cùng một gói.
  4. riêng tư - làm cho các phương thức của bạn chỉ truy cập được vào lớp hiện tại.

Quy tắc tương tự áp dụng khi chỉ định công cụ sửa đổi truy cập trên lớp, phương pháp và trường.

6

Java có bốn mức độ visibility: công cộng, bảo vệ, (mặc định), tin

  1. Hiển thị đối với các gói. mặc định. Không cần bổ trợ.
  2. Chỉ hiển thị với lớp học (riêng tư).
  3. Hiển thị với mọi người (công khai).
  4. Hiển thị với gói và tất cả các lớp con (được bảo vệ).

enter image description here

Mặc định truy cập Modifier - Không keyword:

Mặc định sửa đổi lần truy cập có nghĩa là chúng ta không tuyên bố một cách rõ ràng một truy cập modifier cho một lớp học, lĩnh vực, phương pháp, vv

Biến hoặc phương thức được khai báo mà không có bất kỳ công cụ sửa đổi điều khiển truy cập nào là có sẵn cho bất kỳ lớp nào khác trong cùng một gói. Không thể sử dụng công cụ sửa đổi mặc định cho các phương thức, trường trong giao diện.

riêng Lối vào Modifier - tin:

phương pháp, biến và nhà xây dựng được khai báo là private chỉ có thể được truy cập trong lớp tuyên bố riêng của mình.

Công cụ sửa đổi truy cập riêng tư là cấp truy cập hạn chế nhất. Lớp và giao diện không thể là riêng tư.

Các biến được khai báo riêng tư có thể được truy cập bên ngoài lớp nếu phương thức getter công khai có trong lớp.

Sử dụng công cụ sửa đổi riêng là cách chính để đối tượng đóng gói và ẩn dữ liệu khỏi thế giới bên ngoài.

truy cập công cộng Modifier - công cộng:

Một lớp học, phương pháp xây dựng, giao diện vv tuyên bố nào có thể truy cập từ bất kỳ lớp khác. Do đó, các trường, phương thức, khối được khai báo bên trong một lớp công khai có thể được truy cập từ bất kỳ lớp nào thuộc về Vũ trụ Java.

Tuy nhiên, nếu lớp công khai mà chúng tôi đang cố truy cập nằm trong gói khác thì lớp công khai vẫn cần được nhập.

Do thừa kế lớp, tất cả các phương thức công khai và biến của lớp được kế thừa bởi các lớp con của nó.

Protected Access Modifier - bảo vệ:

biến, phương pháp và nhà thầu được tuyên bố bảo vệ trong một lớp cha thể được truy cập chỉ bởi các lớp con trong gói khác hoặc bất kỳ lớp trong gói lớp học của các thành viên được bảo vệ.

Trình sửa đổi truy cập được bảo vệ không thể áp dụng cho lớp và giao diện. Phương thức, trường có thể được khai báo được bảo vệ, tuy nhiên phương thức và các trường trong giao diện không thể được khai báo bảo vệ.

Truy cập được bảo vệ giúp lớp con có cơ hội sử dụng phương thức trợ giúp hoặc biến, trong khi ngăn không cho lớp không liên quan cố gắng sử dụng nó.

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