天天看點

Java面試基礎篇——内部類一、靜态内部類二、成員内部類三、局部内部類四、匿名内部類

Java内部類的分類和用法

  • 一、靜态内部類
  • 二、成員内部類
  • 三、局部内部類
  • 四、匿名内部類

内部類主要有四種:1.靜态内部類 2.成員内部類 3.局部内部類 4.匿名内部類

一、靜态内部類

定義:被聲明為static的内部類。

特點:

  1. 可以不依賴于外部類執行個體而被執行個體化(通常的内部類需要再外部類執行個體化後才能執行個體化)
  2. 不能與外部類名字相同
  3. 不能通路外部類的普通成員變量,隻能通路外部類中的靜态成員和靜态方法(即使是私有類型也可以通路)
class outerClass{
    static class innerClass{}   //靜态内部類
}
           

二、成員内部類

定義:就是一般的内部類(靜态内部類去掉static就變成了成員内部類)

特點:

  1. 隻有外部類執行個體化後,該内部類才能被執行個體化
  2. 不能有靜态成員
  3. 可自由引用外部類的屬性和方法(包括靜态和非靜态)
class outerClass{
    class innerClass{}   //成員内部類
}
           

三、局部内部類

定義:一個代碼塊内的類,作用範圍就是該代碼塊(最少用到的内部類)

特點:類似局部變量,不能被public,protected,private,static修飾,隻能通路方法中定義為final類型的局部變量

class outerClass{
    public void memberFun(){
        class innerClass{}     //局部内部類---定義在一個代碼塊中
    }
}
           

四、匿名内部類

定義:沒有類名的内部類

特點:

  1. 不使用關鍵字:class、extends、implements
  2. 沒有構造方法
  3. 必須繼承其他類/實作其他接口
  4. 代碼簡潔緊湊,但是可讀性差
public class MyFrame extends Frame{    //外部類
    public MyFrame(){
        addWindowListener(new WindowAdapter(){    //匿名内部類
            public void windowClosing(WindowEvent e)
                dispose();
                System.exit(0);
            }
        });
    }
}