Làm cách nào để mở rộng lớp ẩn danh trong Java?

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

    Chúng ta có thể mở rộng lớp ẩn danh trong Java không?

    Một lớp bình thường có thể triển khai bất kỳ số lượng giao diện nào nhưng lớp bên trong ẩn danh chỉ có thể triển khai một giao diện tại một thời điểm. Một lớp thông thường có thể mở rộng một lớp và triển khai đồng thời bất kỳ số lượng giao diện nào. Nhưng anonymous Lớp bên trong có thể mở rộng một lớp hoặc có thể triển khai một giao diện nhưng không phải cả hai cùng một lúc .

    Làm cách nào để xử lý lớp ẩn danh trong Java?

    Các lớp ẩn danh cho phép bạn viết mã 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 . Chúng giống như các lớp cục bộ ngoại trừ việc chúng không có tên. Sử dụng chúng nếu bạn chỉ cần sử dụng một lớp cục bộ một lần.

    Lớp ẩn danh có thể mở rộng lớp trừu tượng không?

    Bạn tạo một lớp ẩn danh mở rộng lớp trừu tượng của mình . Trong đoạn trích bên dưới, bạn đang mở rộng AbstractDemo và cung cấp các triển khai cho các phương thức trừu tượng của nó.

    Chúng ta có thể thay thế lớp ẩn danh bằng Lambda không?

    Nhân tiện, không phải lúc nào bạn cũng có thể sử dụng biểu thức lambda thay cho lớp Anonymous , do giới hạn của nó là loại SAM. Nếu bạn đang sử dụng một lớp ẩn danh để triển khai một giao diện có hai phương thức trừu tượng thì bạn không thể thay thế nó bằng lambda của Java 8.

    Chủ Đề