Java程式檢查給定類是否為區域性內部類


在方法體內部或迴圈(如for和if)內部定義的巢狀類稱為區域性內部類。

在編寫Java程式檢查給定類是否為區域性內部類之前,我們需要理解巢狀類的概念。讓我們詳細討論一下。

巢狀類

當我們在另一個類中建立類時,它被稱為巢狀類。巢狀類共享相同的範圍。它允許將類似的類分組,並提高封裝性(封裝意味著將類似的功能封裝在一個單元中)。在Java中,我們知道類不能使用private訪問修飾符定義,但我們可以將巢狀類定義為private。有兩種巢狀類:靜態巢狀類和非靜態巢狀類。

靜態巢狀類使用static修飾符定義,而非靜態巢狀類不使用static關鍵字定義,也稱為內部類。

內部類

非靜態或內部類可以訪問其外部類的所有靜態和非靜態方法和成員變數。它還可以訪問私有成員,但是,外部類無法訪問內部類的私有成員。內部類是巢狀類中最常用的型別。我們將在本文後面討論其型別。

語法

class Class_otr {
   // Outer class body
   class Class_inn { 
      // Inner class body
   }
}

要建立類,我們使用了“class”關鍵字。“Class_otr”是外部類的名稱,“Class_inn”是內部類的名稱。

示例

以下程式演示了內部類。

class Cart {
   // the outer class for class ‘Bill’
   private String item1 = "Rice";
   private class Bill {
      public void info() {
         System.out.println("This is an inner class");
       
         // accessing private member ‘item1’
         System.out.println("Item 1 in Cart is: " + item1);
      }
   }
   void display() {
      Bill ob = new Bill(); 
     
      // to create object of class Bill
      ob.info(); 
     
      // method calling using object ‘ob’
   }
}
public class Tutorialspoint {
   public static void main(String args[]) {
      Cart obj = new Cart(); 
     
      // to create object of class Cart
      obj.display(); 
     
      // method calling of outer class Cart using its object
   }
}

輸出

This is an inner class
Item 1 in Cart is: Rice

在上面的程式中,類“Cart”是“Bill”的外部類。我們建立了一個“info”方法,它可以訪問外部類的私有成員“item1”。請注意,“Bill”是一個私有類,我們在外部類的“display()”方法中建立了它的物件。“Cart”的物件是在main方法中建立的。當我們呼叫“display()”方法時,它會自動呼叫類“Bill”的成員。因此,我們得到了該輸出。

檢查區域性內部類的程式

內部類主要有兩種型別:

  • 區域性內部類 - 它定義在方法塊內。我們也可以在迴圈體中定義它。就像區域性變數和方法一樣,它的作用域在其定義所在的方法或迴圈塊內。

  • 匿名內部類 - 它是沒有名稱的內部類型別。

我們將使用以下Java內建方法來檢查指定的類是否為區域性內部類。

  • getClass() - 它返回指定物件的類。

  • getEnclosingClass() - 如果存在任何區域性或匿名類,則返回封閉類,否則返回null。

  • isLocalClass() - 如果指定物件的類是區域性類,則返回true,否則返回false。

要使用上面討論的方法,我們需要匯入下面提到的包:

import java.lang.*; 

示例

import java.lang.*;
public class Otr { 
   // It is the outer class
   public static void main(String[] args){
      class LocalInner{
         public void show(){
            System.out.println("I am local inner class");
            System.out.println("Name of Outer Class of LocalInner class is: " + getClass().getEnclosingClass()); 
            // to fetch the name of its outer class
         }
      }
      LocalInner ob= new LocalInner();
      // Creating object of ‘Inner’ class
      ob.show();
      // fetching the name of class of object ‘ob’ i.e. LocalInner
      Class cls = ob.getClass();
      // Checking if class ‘LocalInner’ is local class or not
      boolean isLocal = cls.isLocalClass();
      // Printing the Boolean result
      System.out.println("Is LocalInner a local inner class: " + isLocal);
   }
} 

輸出

I am local inner class
Name of Outer Class of LocalInner class is: class Otr
Is LocalInner a local inner class: true

由於“isLocalClass()”方法返回true,並且我們也獲得了外部類的名稱。“LocalInner”類是一個區域性內部類。

結論

在本文中,我們討論了一個Java程式來檢查給定類是否為區域性內部類。在我們的程式中,我們使用了java.lang包的不同內建方法。我們還了解了Java中巢狀類和內部類的概念。

更新於: 2023年5月2日

176 次檢視

開啟你的職業生涯

透過完成課程獲得認證

開始學習
廣告