tek4

Chỉ định truy cập trong Java

by - September. 26, 2021
Học
Kiến thức
Tài liệu
<p>Chỉ định truy cập trong Java, hay Access Modifiers, l&agrave; kh&aacute;i niệm quan trọng trong khi l&agrave;m việc với c&aacute;c lớp v&agrave; đối tượng. C&aacute;c chỉ định truy cập sẽ chỉ định khả năng truy cập hoặc phạm vi của một trường dữ liệu, phương thức, h&agrave;m tạo hoặc lớp. Trong b&agrave;i viết n&agrave;y, ch&uacute;ng ta sẽ t&igrave;m hiểu về c&aacute;c chỉ định truy cập c&ugrave;ng với sự trợ gi&uacute;p của c&aacute;c v&iacute; dụ.</p> <h2>Chỉ định truy cập l&agrave; g&igrave;?</h2> <p>Trong Java, c&aacute;c chỉ định truy cập được sử dụng để thiết lập khả năng truy cập (khả năng hiển thị) của c&aacute;c lớp, giao diện, biến, phương thức, h&agrave;m tạo, th&agrave;nh vi&ecirc;n dữ liệu v&agrave; phương thức.</p> <p>V&iacute; dụ:</p> <pre class="language-java"><code>class sinh_vien { public void a() {...} private void b() {...} }</code></pre> <p>Trong v&iacute; dụ tr&ecirc;n, ch&uacute;ng ta đ&atilde; khai b&aacute;o 2 phương thức bao gồm a() v&agrave; b().</p> <p>Trong đ&oacute;:</p> <ul> <li>a c&oacute; chỉ định truy cập l&agrave; public - Điều n&agrave;y c&oacute; nghĩa l&agrave; n&oacute; c&oacute; thể được truy cập bởi c&aacute;c lớp kh&aacute;c.</li> <li>b c&oacute; chỉ định truy cập l&agrave; private - Điều n&agrave;y c&oacute; nghĩa l&agrave; n&oacute; kh&ocirc;ng thể được truy cập bởi c&aacute;c lớp kh&aacute;c.</li> <li>Từ kh&oacute;a public v&agrave; private l&agrave; c&aacute;c chỉ định quyền truy cập trong Java.</li> </ul> <p><strong>Ch&uacute; &yacute;: Kh&ocirc;ng thể đặt chỉ định truy cập của c&aacute;c phương thức getters (Phương thức getter l&agrave; c&aacute;c phương thức để lấy gi&aacute; trị của lớp).</strong></p> <h2>C&aacute;c kiểu chỉ định quyền truy cập</h2> <p>C&oacute; bốn từ kh&oacute;a được sử dụng để chỉ định quyền truy cập trong Java bao gồm như sau.</p> <table width="787"> <tbody> <tr> <td style="text-align: center;">Chỉ định</td> <td style="text-align: center;">M&ocirc; tả</td> </tr> <tr> <td style="text-align: center;">Mặc định</td> <td style="text-align: center;">C&oacute; thể truy cập trong một g&oacute;i cụ thể.</td> </tr> <tr> <td style="text-align: center;">Private</td> <td style="text-align: center;">C&oacute; thể truy cập chỉ trong một lớp cụ thể.</td> </tr> <tr> <td style="text-align: center;">Protected</td> <td style="text-align: center;">C&oacute; thể truy cập trong một g&oacute;i hoặc c&aacute;c lớp con kh&aacute;c.</td> </tr> <tr> <td style="text-align: center;">Public</td> <td style="text-align: center;">C&oacute; thể truy cập ở bất cứ đ&acirc;u.</td> </tr> </tbody> </table> <h3>1. Chỉ định truy cập mặc định</h3> <p>Nếu ch&uacute;ng ta kh&ocirc;ng chỉ định r&otilde; r&agrave;ng bất kỳ truy cập n&agrave;o cho c&aacute;c lớp, phương thức, biến,..., th&igrave; theo mặc định, chỉ định truy cập mặc định được sử dụng.</p> <p>V&iacute; dụ:</p> <pre class="language-java"><code>package defaultPackage; class sinh_vien { void in_thong_tin(){ System.out.println("Thong tin sinh vien"); } }</code></pre> <p>Ở đ&acirc;y, lớp sinh_vien c&oacute; chỉ định quyền truy cập l&agrave; mặc định. V&agrave; lớp n&agrave;y được hiển thị cho tất cả c&aacute;c lớp thuộc g&oacute;i <span class="lang:default decode:true crayon-inline">defaultPackage</span>. Tuy nhi&ecirc;n, nếu ch&uacute;ng ta sử dụng lớp sinh_vien trong một lớp kh&aacute;c b&ecirc;n ngo&agrave;i g&oacute;i defaultPackage, tr&igrave;nh bi&ecirc;n dịch sẽ b&aacute;o lỗi.</p> <h3>2. Chỉ định quyền truy cập private</h3> <p>Khi c&aacute;c biến v&agrave; phương thức được khai b&aacute;o l&agrave; <span class="lang:default decode:true crayon-inline">private</span>, ch&uacute;ng kh&ocirc;ng thể được truy cập b&ecirc;n ngo&agrave;i lớp.</p> <p>V&iacute; dụ: Đoạn m&atilde; b&ecirc;n dưới đ&acirc;y sẽ bị b&aacute;o lỗi.</p> <pre class="language-java"><code>class sinh_vien { private int ID_sv; } public class Main { public static void main(String[] main){ sinh_vien sv = new sinh_vien(); sv.ID_sv = 1; } }</code></pre> <p>Tr&igrave;nh bi&ecirc;n dịch th&ocirc;ng b&aacute;o lỗi bởi v&igrave; ID_sv được khai b&aacute;o l&agrave; private trong lớp sinh_vien, do đ&oacute;, khi ta cố gắng truy cập biến ID_sv n&agrave;y trong lớp Main, n&oacute; sẽ th&ocirc;ng b&aacute;o lỗi. V&igrave; ID_sv chỉ được truy cập trong lớp sinh_vien.</p> <p>Vậy l&agrave;m thế n&agrave;o nếu ch&uacute;ng ta cần truy cập c&aacute;c biến đ&oacute;. Trong trường hợp n&agrave;y, ch&uacute;ng ta c&oacute; thể sử dụng phương thức <span class="lang:default decode:true crayon-inline">getters</span>v&agrave; <span class="lang:default decode:true crayon-inline">setters</span>.</p> <p>V&iacute; dụ:</p> <pre class="language-java"><code>class sinh_vien { private int ID_sv = 1; public int getID(){ return ID_sv; } } public class Main { public static void main(String[] main){ sinh_vien sv = new sinh_vien(); System.out.println(sv.getID()); } }</code></pre> <p>Để lấy được gi&aacute; trị của biến ID_sv trong lớp Main, ta sẽ phải sử dụng phương thức getter l&agrave; getID(), trả về gi&aacute; trị của biến ID_sv được khai b&aacute;o l&agrave; private.</p> <p><strong>Ch&uacute; &yacute;: Ch&uacute;ng ta kh&ocirc;ng thể khai b&aacute;o c&aacute;c lớp v&agrave; interface l&agrave; private trong Java. Tuy nhi&ecirc;n, c&aacute;c lớp nằm b&ecirc;n trong lớp kh&aacute;c c&oacute; thể được khai b&aacute;o l&agrave; private.</strong></p> <h3>3. Chỉ định quyền truy cập Protected</h3> <p>Khi c&aacute;c phương thức v&agrave; th&agrave;nh vi&ecirc;n dữ liệu được khai b&aacute;o l&agrave; <span class="lang:default decode:true crayon-inline">protected</span>, ch&uacute;ng ta c&oacute; thể truy cập ch&uacute;ng trong c&ugrave;ng một g&oacute;i Package cũng như từ c&aacute;c lớp con (C&aacute;c lớp kế thừa).</p> <p>V&iacute; dụ:</p> <pre class="language-java"><code>class sinh_vien { protected void in_thong_tin() { System.out.println("Day la sinh vien"); } } class sinh_vien_y extends sinh_vien { public static void main(String[] args) { sinh_vien_y sv = new sinh_vien_y(); sv.in_thong_tin(); } }</code></pre> <p>Kết quả:</p> <pre class="language-markup"><code>Day la sinh vien</code></pre> <p>Trong v&iacute; dụ tr&ecirc;n, ch&uacute;ng ta c&oacute; một phương thức protected c&oacute; t&ecirc;n l&agrave; in_thong_tin() b&ecirc;n trong lớp sinh_vien. Lớp sinh_vien được kế thừa bởi lớp sinh_vien_y. Sau đ&oacute;, ch&uacute;ng ta tạo một đối tượng sv của lớp sinh_vien_y. V&igrave; phương thức được khai b&aacute;o l&agrave; protected, n&ecirc;n ta c&oacute; thể truy cập phương thức in_thong_tin() từ lớp con l&agrave; sinh_vien_y</p> <p><strong>Ch&uacute; &yacute;: Ch&uacute;ng ta kh&ocirc;ng thể khai b&aacute;o c&aacute;c lớp hoặc interface l&agrave; protected trong Java.</strong></p> <h3>4. Chỉ định truy cập public</h3> <p>Khi c&aacute;c phương thức, biến, lớp,... được khai b&aacute;o l&agrave; <span class="lang:default decode:true crayon-inline">public</span>, th&igrave; ch&uacute;ng ta c&oacute; thể truy cập ch&uacute;ng từ bất cứ đ&acirc;u.</p> <p>V&iacute; dụ:</p> <pre class="language-java"><code>class sinh_vien { public void in_thong_tin() { System.out.println("Day la sinh vien"); } } class sinh_vien_y { public static void main(String[] args) { sinh_vien sv = new sinh_vien(); sv.in_thong_tin(); } }</code></pre> <p>Trong đoạn m&atilde; tr&ecirc;n, v&igrave; phương thức in_thong_tin() trong lớp sinh_vien được khai b&aacute;o l&agrave; public, n&ecirc;n ta c&oacute; thể truy cập n&oacute; ở bất kỳ đ&acirc;u, trong đ&oacute; bao gồm cả lớp sinh_vien_y.</p> <p><img class="aligncenter wp-image-7485 size-full" style="display: block; margin-left: auto; margin-right: auto;" src="https://tek4.vn/wp-content/uploads/2021/01/Capture-38.png" alt="Chỉ định truy cập trong Java" width="577" height="407" /></p> <p>C&aacute;c chỉ định quyền truy cập chủ yếu được sử dụng để thực hiện t&iacute;nh năng đ&oacute;ng g&oacute;i. N&oacute; gi&uacute;p kiểm so&aacute;t phần n&agrave;o của chương tr&igrave;nh c&oacute; thể truy cập được v&agrave;o c&aacute;c th&agrave;nh vi&ecirc;n dữ liệu của một lớp. V&igrave; vậy, việc lạm dụng dữ liệu c&oacute; thể được ngăn chặn.</p> <p>Tr&ecirc;n đ&acirc;y l&agrave; kh&aacute;i niệm v&agrave; v&iacute; dụ cơ bản về c&aacute;c chỉ định truy cập trong Java. Hy vọng mọi người c&oacute; thể &aacute;p dụng v&agrave;o trong chương tr&igrave;nh của m&igrave;nh. Mọi người h&atilde;y tiếp tục theo d&otilde;i c&aacute;c b&agrave;i tiếp theo v&agrave; cập nhật c&aacute;c b&agrave;i mới nhất tr&ecirc;n <a href="http://tek4.vn">tek4</a> nh&eacute;!</p>