Java教程 目录

Java内部类

在Java中,就像方法一样,类的变量也可以将另一个类作为它的成员。 在Java中允许在一个类中编写另一个类。 在其中编写的类称为嵌套类,而保存内部类的类称为外部类。

语法

以下是编写嵌套类的语法。 这里,类OuterDemo是外部类,而类InnerDemo是嵌套类。

----- --------- -
   ----- --------- -
   -
-

嵌套类分为两种类型 -

  • 非静态嵌套类 - 这些是类的非静态成员。
  • 静态嵌套类 - 这些是类的静态成员。

1. 内部类(非静态嵌套类)

内部类是Java中的安全机制。 我们知道一个类不能与private访问修饰符关联,但如果将该类作为其他类的成员,那么内部类可以变为private。 这也用于访问类的私有成员。

内部类有三种类型,具体取决于定义它们的方式和位置。它们分别是 -

  • 内部类
  • 方法-局部内部类
  • 匿名内部类

1.1. 内部类

创建内部类非常简单,只需要在一个类中编写一个类。 与类不同,内部类可以是私有的,当将内部类声明为private,就无法从类外部的对象访问它。

以下是创建内部类并访问它的程序。 在示例中,将内部类设为private,并通过方法访问类。

示例

----- --------- -
   --- ----

   -- ---
   ------- ----- --------- -
      ------ ---- ------- -
         ------------------------ -- -- ----- --------
      -
   -

   -- ------------
   ---- --------------- -
      --------- ----- - --- ------------
      --------------
   -
-

------ ----- ------- -

   ------ ------ ---- ----------- ------- -
      -- ------
      --------- ----- - --- ------------

      -- -- ------------------
      ----------------------
   -
-

在示例中OuterDemo是外部类,InnerDemo是内部类,display_Inner()是在其中实例化内部类的方法,并且这个方法是从main方法调用的。

编译并执行上述程序,将得到以下结果 -

---- -- -- ----- ------

访问私有成员

如前所述,内部类也用于访问类的私有成员。 假设,一个类想要让私有成员访问,可从内部类中的方法返回私有成员。

要实例化内部类,最初必须实例化外部类。 此后,使用外部类的对象访问内部类,以下是实例化内部类的方法。

--------- ----- - --- ------------
------------------- ----- - --------- ------------

以下程序显示如何使用内部类访问类的私有成员。

----- --------- -
   -- --------
   ------- --- --- - ----  

   -- ---
   ------ ----- --------- -
      ------ --- -------- -
         ------------------------ -- --- ------ ------ -- --- ----- --------
         ------ ----
      -
   -
-

------ ----- --------- -

   ------ ------ ---- ----------- ------- -
      -- ------
      --------- ----- - --- ------------

      -- ------
      ------------------- ----- - --------- ------------
      -----------------------------------
   -
-

编译并执行上述程序,将得到以下结果 -

---- -- --- ------ ------ -- --- ----- ------ ---

1.2. 方法-局部内部类

在Java中,可以在方法中编写一个类,这将是一个局部类型。与局部变量一样,内部类的范围在方法中受到限制。

方法局部内部类只能在定义内部类的方法中实例化。 以下程序显示了如何使用方法局部内部类。

示例

------ ----- ---------- -
   -- --------
   ---- ----------- -
      --- --- - ---

      -- -------
      ----- --------------- -
         ------ ---- ------- -
            ------------------------ -- ------ ----- ----- -------       
         -   
      - -- --- -- ----- -----

      -- -----
      --------------- ----- - --- ------------------
      --------------
   -

   ------ ------ ---- ----------- ------- -
      ---------- ----- - --- -------------
      ------------------
   -
-

编译并执行上述程序,将得到以下结果 -

---- -- ------ ----- ----- --

1.3. 匿名内部类

声明没有类名的内部类称为匿名内部类。 在匿名内部类中,同时声明并实例化内部类。 通常,只要需要覆盖类或接口的方法,就会使用它们。 匿名内部类的语法如下 -

语法

-------------- -------- - --- ---------------- -
   ------ ---- ----------- -
      --------
      --------
   -   
--

以下程序显示如何使用匿名内部类覆盖类的方法。

-------- ----- -------------- -
   ------ -------- ---- -----------
-

------ ----- ----------- -

   ------ ------ ---- ----------- ------- -
      -------------- ----- - --- ---------------- -
         ------ ---- ---------- -
            ------------------------ -- -- ------- -- --------- ----- --------
         -
      --
      -----------------    
   -
-

编译并执行上述程序,将得到以下结果 -

---- -- -- ------- -- --------- ----- -----

以同样的方式,可以使用匿名内部类覆盖具体类的方法以及接口。

2. 匿名内部类作为参数

通常,如果方法接受接口,抽象类或具体类的对象,那么可以实现接口,扩展抽象类,并将对象传递给方法。如果它是一个类,那么可以直接将它传递给方法。

在这三种情况下,都可以将匿名内部类传递给方法。 以下是将匿名内部类作为方法参数传递的语法 -

----------------- ---------- -
   ------ ---- ---- -
      -----
      -----
   -
---

以下程序演示如何将匿名内部类作为方法参数传递。

-- ----
--------- ------- -
   ------ --------
-

------ ----- ------- -
   -- ---- ------- -----
   ------ ---- ---------------------- -- -
      ---------------------------- -
         -- ---- -- -- ------- -- --------- ----- ----- -- -- -----------  
   -

   ------ ------ ---- ----------- ------- -
      -- ----
      ------- --- - --- ----------

      -- -----------
      ---------------------- --------- -
         ------ ------ ------- -
            ------ --------
         -
      ---
   -
-

编译并执行上述程序,将得到以下结果 -

------ ---- -- -- ------- -- --------- ----- ----- -- -- --------

3. 静态嵌套类

静态内部类是嵌套类,它是外部类的静态成员。 可以使用其他静态成员在不实例化外部类的情况下访问它。 就像静态成员一样,静态嵌套类无法访问外部类的实例变量和方法。 静态嵌套类的语法如下 -

----- ------- -
   ------ ----- ----------- -
   -
-

实例化静态嵌套类与实例化内部类略有不同。 以下程序显示了如何使用静态嵌套类。

示例

------ ----- ----- -
   ------ ----- ----------- -
      ------ ---- ----------- -
         ------------------------ -- -- ------ --------
      -
   -

   ------ ------ ---- ----------- ------- -
      ----------------- ------ - --- --------------------     
      -------------------
   -
-

编译并执行上述程序,将得到以下结果 -

---- -- -- ------ -----

上一篇:Java组合与继承
下一篇:Java聚合