Thứ Tư, 23 tháng 1, 2019

Khóa học lập trình Java - Các lớp bên trong

Trong chương này, chúng ta sẽ thảo luận về các lớp bên trong của Khóa học lập trình Java.

Lớp học lồng nhau

Trong Khóa học lập trình Java, giống như các phương thức, các biến của một lớp cũng có thể có một lớp khác làm thành viên của nó. Viết một lớp trong một lớp khác được cho phép trong Khóa học lập trình Java. Lớp được viết bên trong được gọi là lớp lồng nhau và lớp chứa lớp bên trong được gọi là lớp bên ngoài .

Cú pháp

Sau đây là cú pháp để viết một lớp lồng nhau. Ở đây, lớp Outer_Demo là lớp bên ngoài và lớp Inner_Demo là lớp lồng nhau.

class Outer_Demo {
   class Inner_Demo {
   }
}

Các lớp lồng nhau được chia thành hai loại

Các lớp lồng nhau không tĩnh - Đây là các thành viên không tĩnh của một lớp.

Các lớp lồng nhau tĩnh - Đây là các thành viên tĩnh của một lớp.

Khóa học lập trình Java chuyên nghiệp
Khóa học lập trình Java chuyên nghiệp

Các lớp bên trong (Các lớp lồng không tĩnh)

Các lớp bên trong là một cơ chế bảo mật trong Khóa học lập trình Java. Chúng ta biết một lớp không thể được liên kết với công cụ sửa đổi truy cập riêng tư , nhưng nếu chúng ta có lớp là thành viên của lớp khác, thì lớp bên trong có thể được đặt ở chế độ riêng tư. Và điều này cũng được sử dụng để truy cập các thành viên tư nhân của một lớp.

Các lớp bên trong có ba loại tùy thuộc vào cách thức và nơi bạn xác định chúng. Họ là -

Lớp học bên trong

Lớp bên trong phương thức

Lớp bên trong vô danh

Lớp học bên trong

Tạo một lớp bên trong khá đơn giản. Bạn chỉ cần viết một lớp trong một lớp. Không giống như một lớp, một lớp bên trong có thể là riêng tư và một khi bạn khai báo một lớp bên trong riêng tư, nó không thể được truy cập từ một đối tượng bên ngoài lớp.

Sau đây là chương trình để tạo một lớp bên trong và truy cập nó. Trong ví dụ đã cho, Khóa học lập trình Java chúng ta đặt lớp bên trong riêng tư và truy cập lớp thông qua một phương thức.
class Outer_Demo {
   int num;
   
   // inner class
   private class Inner_Demo {
      public void print() {
         System.out.println("This is an inner class");
      }
   }
   
   // Accessing he inner class from the method within
   void display_Inner() {
      Inner_Demo inner = new Inner_Demo();
      inner.print();
   }
}
   
public class My_class {

   public static void main(String args[]) {
      // Instantiating the outer class 
      Outer_Demo outer = new Outer_Demo();
      
      // Accessing the display_Inner() method.
      outer.display_Inner();
   }
}

Ở đây bạn có thể quan sát rằng Outer_Demo là lớp bên ngoài, Inner_Demolà lớp bên trong, display_Inner () là phương thức bên trong mà chúng ta đang khởi tạo lớp bên trong và phương thức này được gọi từ phương thức chính .

Nếu bạn biên dịch và thực hiện chương trình trên, bạn sẽ nhận được kết quả sau -

Đầu ra

This is an inner class.

Truy cập các thành viên tư nhân

Như đã đề cập trước đó, các lớp bên trong cũng được sử dụng để truy cập các thành viên riêng của một lớp. Giả sử, một lớp đang có các thành viên tư nhân để truy cập chúng Khóa học lập trình Java

Viết một lớp bên trong nó, trả về các thành viên riêng từ một phương thức trong lớp bên trong, giả sử getValue () và cuối cùng từ một lớp khác (từ đó bạn muốn truy cập các thành viên riêng) gọi phương thức getValue () của bên trong lớp học.

Để khởi tạo lớp bên trong, ban đầu bạn phải khởi tạo lớp bên ngoài. Sau đó, sử dụng đối tượng của lớp bên ngoài, sau đây là cách mà bạn có thể khởi tạo lớp bên trong.

Outer_Demo outer = new Outer_Demo();
Outer_Demo.Inner_Demo inner = outer.new Inner_Demo();

Chương trình sau đây cho thấy cách truy cập các thành viên riêng của một lớp bằng cách sử dụng lớp bên trong.
class Outer_Demo {
   // private variable of the outer class
   private int num = 175;  
   
   // inner class
   public class Inner_Demo {
      public int getNum() {
         System.out.println("This is the getnum method of the inner class");
         return num;
      }
   }
}

public class My_class2 {

   public static void main(String args[]) {
      // Instantiating the outer class
      Outer_Demo outer = new Outer_Demo();
      
      // Instantiating the inner class
      Outer_Demo.Inner_Demo inner = outer.new Inner_Demo();
      System.out.println(inner.getNum());
   }
}
Nếu bạn biên dịch và thực hiện chương trình trên, bạn sẽ nhận được kết quả sau

This is the getnum method of the inner class: 175

Lớp bên trong phương thức

Trong Khóa học lập trình Java, chúng ta có thể viết một lớp trong một phương thức và đây sẽ là một kiểu cục bộ. Giống như các biến cục bộ, phạm vi của lớp bên trong bị hạn chế trong phương thức.

Một lớp bên trong phương thức cục bộ chỉ có thể được khởi tạo trong phương thức nơi lớp bên trong được định nghĩa. Chương trình sau đây cho thấy cách sử dụng lớp bên trong phương thức cục bộ.
public class Outerclass {
   // instance method of the outer class 
   void my_Method() {
      int num = 23;

      // method-local inner class
      class MethodInner_Demo {
         public void print() {
            System.out.println("This is method inner class "+num);    
         }   
      } // end of inner class
    
      // Accessing the inner class
      MethodInner_Demo inner = new MethodInner_Demo();
      inner.print();
   }
   
   public static void main(String args[]) {
      Outerclass outer = new Outerclass();
      outer.my_Method();        
   }
}
Nếu bạn biên dịch và thực hiện chương trình trên, bạn sẽ nhận được kết quả sau

This is method inner class 23

Lớp bên trong vô danh

Một lớp bên trong được khai báo mà không có tên lớp được gọi là lớp bên trong ẩn danh . Trong trường hợp các lớp bên trong ẩn danh, chúng tôi khai báo và khởi tạo chúng cùng một lúc.

Nói chung, chúng được sử dụng bất cứ khi nào bạn cần ghi đè phương thức của lớp hoặc giao diện. Cú pháp của một lớp bên trong ẩn danh như sau Khóa học lập trình Java.

AnonymousInner an_inner = new AnonymousInner() {
   public void my_method() {
      ........
      ........
   }   
};

Chương trình sau đây cho thấy cách ghi đè phương thức của lớp bằng lớp bên trong ẩn danh.
abstract class AnonymousInner {
   public abstract void mymethod();
}

public class Outer_class {

   public static void main(String args[]) {
      AnonymousInner inner = new AnonymousInner() {
         public void mymethod() {
            System.out.println("This is an example of anonymous inner class");
         }
      };
      inner.mymethod(); 
   }
}
Nếu bạn biên dịch và thực hiện chương trình trên, bạn sẽ nhận được kết quả sau

This is an example of anonymous inner class

Theo cùng một cách, bạn có thể ghi đè các phương thức của lớp cụ thể cũng như giao diện bằng một lớp bên trong ẩn danh.

Lớp bên trong vô danh như là đối số

Nói chung, nếu một phương thức chấp nhận một đối tượng của một giao diện, một lớp trừu tượng hoặc một lớp cụ thể, thì chúng ta có thể thực hiện giao diện, mở rộng lớp trừu tượng và truyền đối tượng cho phương thức. Khóa học lập trình Java Nếu nó là một lớp, thì chúng ta có thể trực tiếp truyền nó cho phương thức.

Nhưng trong cả ba trường hợp, bạn có thể truyền một lớp bên trong ẩn danh cho phương thức. Đây là cú pháp chuyển một lớp bên trong ẩn danh làm đối số phương thức

obj.my_Method(new My_Class() {
   public void Do() {
      .....
      .....
   }
});

Chương trình sau đây cho thấy cách vượt qua một lớp bên trong ẩn danh làm đối số phương thức.
// interface
interface Message {
   String greet();
}

public class My_class {
   // method which accepts the object of interface Message
   public void displayMessage(Message m) {
      System.out.println(m.greet() +
         ", This is an example of anonymous inner class as an argument");  
   }

   public static void main(String args[]) {
      // Instantiating the class
      My_class obj = new My_class();

      // Passing an anonymous inner class as an argument
      obj.displayMessage(new Message() {
         public String greet() {
            return "Hello";
         }
      });
   }
}
Nếu bạn biên dịch và thực hiện chương trình trên, nó sẽ cho bạn kết quả như sau

Hello, This is an example of anonymous inner class as an argument

Lớp lồng tĩnh

Một lớp bên trong tĩnh là một lớp lồng nhau là một thành viên tĩnh của lớp bên ngoài. Nó có thể được truy cập mà không cần khởi tạo lớp bên ngoài, sử dụng các thành viên tĩnh khác.

Cũng giống như các thành viên tĩnh, một lớp lồng tĩnh không có quyền truy cập vào các biến và phương thức của lớp bên ngoài Khóa học lập trình Java. Cú pháp của lớp lồng tĩnh như sau

class MyOuter {
   static class Nested_Demo {
   }
}

Khởi tạo một lớp lồng tĩnh khác một chút so với khởi tạo một lớp bên trong. Chương trình sau đây cho thấy cách sử dụng một lớp lồng tĩnh.
public class Outer {
   static class Nested_Demo {
      public void my_method() {
         System.out.println("This is my nested class");
      }
   }
   
   public static void main(String args[]) {
      Outer.Nested_Demo nested = new Outer.Nested_Demo();  
      nested.my_method();
   }
}
Nếu bạn biên dịch và thực hiện chương trình trên, bạn sẽ nhận được kết quả sau

This is my nested class

Không có nhận xét nào:

Đăng nhận xét

Lập trình Java - Ngoại lệ

Một ngoại lệ (hoặc sự kiện đặc biệt) là một vấn đề phát sinh trong quá trình thực hiện chương trình. Khi xảy ra Ngoại lệ , luồng bình thường...