Lớp ẩn danh trong ví dụ Java

Đôi khi chúng ta có thể khai báo lớp bên trong mà không cần đặt tên, loại lớp bên trong đó được gọi là lớp ẩn danh. Lớp ẩn danh Java là một lớp bên trong không có tên

Mục tiêu chính của các lớp bên trong ẩn danh là “chỉ để sử dụng ngay lập tức”.
Chúng ta có thể sử dụng java 3 cách ẩn danh

  1. Lớp bên trong ẩn danh mở rộng một lớp
  2. Lớp bên trong ẩn danh thực hiện một giao diện
  3. Lớp bên trong ẩn danh được định nghĩa là đối số của phương thức/hàm tạo

2. Ví dụ về lớp ẩn danh

class Greeter {
    
    public void wish[] {
        System.out.println["Hello"];
    }
}

public class Test {
    
    public static void main[String[] args] {
         
        // Anonymous Inner class 1
        Greeter englishGreet = new Greeter[] {
            // This is equivalent code of extending Greeter class and then overriding wish[] method
            public void wish[] {
                System.out.println["Hi"];
            }
        };
        
        // Anonymous Inner class 2
        Greeter frenchGreet = new Greeter[] {
                // This is equivalent code of extending Greeter class and then overriding wish[] method
                public void wish[] {
                    System.out.println["tout le monde"];
                }
         };
        
        englishGreet.wish[]; // Hi
        frenchGreet.wish[]; // tout le monde
        Greeter britanGreet = new Greeter[];
        britanGreet.wish[]; // Hello
    }
}

đầu ra

Hi
tout le monde
Hello

2. Lớp ẩn danh mở rộng một lớp

Sau đây là ví dụ cho Lớp bên trong ẩn danh mở rộng một lớp.
Và bạn có thể khai báo như sau trong các lớp ẩn danh.
1. Trường
2. Các phương thức bổ sung [ngay cả khi chúng không triển khai bất kỳ phương thức nào thuộc loại siêu]
3. Trình khởi tạo phiên bản
4. Các lớp cục bộ
5. Tuy nhiên, bạn không thể khai báo hàm tạo trong lớp ẩn danh.

Bên trong Inonymous lớp bên trong, chúng ta có thể lấy hoặc khai báo các phương thức mới nhưng bên ngoài lớp bên trong ẩn danh, chúng ta không thể gọi các phương thức này trực tiếp vì chúng ta phụ thuộc vào tham chiếu gốc

Lớp bên trong Java Anonymous là một lớp bên trong không có tên và chỉ có một đối tượng duy nhất được tạo

  • Nó hoạt động giống như lớp cục bộ, tất cả các hạn chế vẫn giữ nguyên đối với các thành viên của nó

  • Bạn có thể khai báo những điều sau đây bên trong một lớp ẩn danh

    • Thuộc tính [các trường]
    • Các phương thức [Chỉ các phương thức mẫu], ngay cả khi chúng không triển khai bất kỳ phương thức nào của siêu kiểu
    • Trình khởi tạo phiên bản
    • lớp địa phương
  • Làm cách nào để tạo lớp ẩn danh?

    Trên thực tế, trong các tác phẩm khác nhau, chúng tôi sử dụng các lớp ẩn danh. Vì vậy, có nhiều lý do để thực hiện nó.
    Sau đây chúng ta sẽ xem xét một ví dụ về chúng.

    // Step 1: Create an example class containing at least one member.
    class A{
      public void show[]{
       System.out.println["We are inside A class"];
     }
    }
    
    // Step 2: Create the Main class which contains the main method.
    
    public class Main{
    
      public static void main[String [] args]{
      
      // Step 3: Create simple object and call the show[] method
      A obj1 = new A[];
      obj1.show[];
      System.out.println["===================================="];
      
      // Step 4: Create anonymous object
         A obj = new A[]{
         
         @Override
         public void show[]{
          
           System.out.println["Anonymous class has been created"];
           
         } 
         }; //A semicolon is essential here.
      
      // Step 5 : Use your anonymous object.
      
        obj.show[];
           
      }
    }
    

    đầu ra

    We are inside A class
    ====================================
    Anonymous class has been created
    

    Khởi tạo cú đúp

    Giống như một Nhà phát triển Java cấp cao, nếu bạn muốn tạo một lớp ẩn danh, thì hãy tìm hiểu một chút về vũ khí này. Khởi tạo cú đúp là sự kết hợp của hai quá trình riêng biệt trong java. Có hai { dấu ngoặc nhọn liên quan đến nó. Nếu bạn thấy hai dấu ngoặc nhọn liên tiếp { trong mã java, thì đó là cách sử dụng khởi tạo dấu ngoặc kép. Cú đúp đầu tiên là tạo một lớp bên trong ẩn danh. Cú đúp thứ hai là một khối khởi tạo. Khi bạn sử dụng khối khởi tạo cho một lớp bên trong ẩn danh, nó sẽ trở thành khởi tạo cú đúp java

    Hãy để chúng tôi xem việc thực hiện nó

    /*Here we will create a list in which the elements are 
    stored with the help of double brace initialization.*/
    
    import java.util.*;
    
    public class Main{
    
    public static void main[String[] args]{
    
    List  list = new ArrayList[]
    {{
     // Double Brace Initialization
     add[56];
     add[67];
     add[90];
     add[78];
     add[35];
    
    }};
    
    // print the list
    System.out.println[list];
    }
    }
    

    đầu ra

    [56, 67, 90, 78, 35]
    

    Khi nào thì sử dụng nó?

    Lớp ẩn danh chỉ được tạo để sử dụng một lần, chúng tôi không thể sử dụng lại nó. Hãy để chúng tôi xem xét một số kịch bản

    • Khi mục đích duy nhất của bạn là ghi đè một phương thức
    • Khi bạn muốn triển khai bất kỳ giao diện chức năng nào. [Chúng ta sẽ thấy điều đó với sự trợ giúp của việc triển khai trong thế giới thực]

    Thực hiện trong thế giới thực


    Vì, Lớp ẩn danh được tạo chỉ để sử dụng một lần, nên nó chủ yếu được sử dụng để phát triển ứng dụng. Hiện tại, bạn có thể tưởng tượng bất kỳ ứng dụng Android nào.
    Có lẽ chúng ta cần khởi tạo một giao diện để cung cấp chức năng cho một nút cụ thể của giao diện người dùng. Nhưng chúng tôi biết rằng một giao diện không thể được khởi tạo trực tiếp. Trong trường hợp đó, các lớp Ẩn danh cho phép bạn làm cho mã của mình ngắn gọn hơn. Chúng cho phép bạn khai báo và khởi tạo một lớp cùng một lúc.

    package com.example.myapplication;
    
    import androidx.appcompat.app.AppCompatActivity;
    
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    import android.widget.Toast;
    
    public class MainActivity2 extends AppCompatActivity {
    
            private Button button;
            
        @Override
        protected void onCreate[Bundle savedInstanceState] {
            super.onCreate[savedInstanceState];
            setContentView[R.layout.activity_main2];
            
            button= findViewById[R.id.button_display];
            
            // set button funtionality in the  anonymous class
            button.setOnClickListener[new View.OnClickListener[] {
            
                @Override
                public void onClick[View v] {
                    
                    /* this code will help you to display the particular message in the mobile screen.
                       whenever the button is clicked.
                     */
                    Toast.makeText[MainActivity2.this,"Button is Clicked",Toast.LENGTH_LONG].show[];
                }
            }];
        }
    }
    

    đầu ra

    câu hỏi


    Q. ]1

    Các lớp ẩn danh có thể có các thành viên tĩnh trong đó không?

    Không

    Đúng

    Các lớp ẩn danh không thể có bất kỳ thành viên tĩnh nào ngoại trừ những thành viên không đổi

    Q. ]2

    Chúng ta có thể truy cập tất cả các thành viên của lớp bên ngoài bên trong một lớp ẩn danh không?

    Đúng

    Không

    Tất nhiên, lý do là một lớp ẩn danh giữ một tham chiếu ẩn đến lớp kèm theo và thông qua tham chiếu đó, nó có thể truy cập bất kỳ/tất cả các trường thành viên & phương thức của lớp bên ngoài

    Hai cách để tạo Java ẩn danh trong một lớp là gì?

    Lớp bên trong ẩn danh Java có thể được tạo theo hai cách. Lớp [có thể trừu tượng hoặc cụ thể]. Giao diện .

    Lambda trong Java có phải là một lớp ẩn danh không?

    Biểu thức lambda là một dạng rút gọn để viết một lớp ẩn danh . Bằng cách sử dụng biểu thức lambda, chúng ta có thể khai báo các phương thức mà không cần bất kỳ tên nào. Trong khi đó, Anonymous class là một lớp bên trong không có tên, nghĩa là chúng ta có thể khai báo và khởi tạo lớp cùng một lúc.

    Các loại lớp ẩn danh khác nhau là gì?

    Các loại lớp bên trong ẩn danh trong Java .
    Lớp bên trong ẩn danh mở rộng một lớp
    Lớp bên trong ẩn danh thực hiện một giao diện
    Lớp bên trong ẩn danh làm đối số

    Chúng ta có thể sử dụng ẩn danh ở đâu?

    Các câu ví dụ .
    Người hiến tặng xin được giấu tên
    Một người mua ẩn danh đã mua bức tranh
    Trường đại học nhận được một món quà ẩn danh
    Anh ta đã gọi một cú điện thoại nặc danh cho cảnh sát

    Chủ Đề