匿名類可直接使用上下文已定義變量

前言

昨天晚上聽到潘老師解答邢彥年學長的問題,聽了半天也是雲裏霧裏,畢竟身爲一個「假的」計算機專業的學生,我什麼都不知道,什麼匿名類,匿名函數......這些我都沒印象了,我只記得那位教面向對象程序設計的老師一節課能講60多頁,六頁的知識用兩句話就能講完,如今既然接觸到了這個東西就得學明白了。
7DB73F2D-5BD2-401a-A26A-E9E1D687D923.png
IMG_20200229_105217.jpgjava

匿名類

首先來看一下匿名類的定義
  • 匿名類,就是內部類,是沒有類名的類,其名稱由Java編譯器給出,通常是形如:外部類名稱+$+匿名類順序,沒有名稱也就是其餘地方就不能引用,不能實例化,只用一次,固然也就不能有構造器。
  • 匿名類就是利用父類的構造函數和自身類體構形成一個類。
  • 匿名類能夠繼承父類的方法,也能夠重寫父類的方法。
  • 匿名類能夠訪問外部類的成員變量和方法,匿名類的類體不能夠聲明稱static成員變量和static方法。
  • 匿名類因爲是一個new的結果,因此其實能夠賦值給一個父類對象。所以能夠分爲兩種匿名類,成員匿名類和局部匿名類(做爲函數參數)
  • 匿名類的語法:
new  <父類或者接口名>  (<參數列表>) {    成員定義} ;
匿名類實現接口
interface hello
    {  
        String start();  
    }  
public class OK
{  
   public String hello()
    {  
      hello sentence =new hello()  //這個地方就是匿名類  
        { 
            String start()
            { 
               return "hello world";
            }  
        } 
        return sentence;
    }  
}

經過代碼看出,實際上hello是一個接口,自己接口是不能直接new的,可是呢在new的時候,hello這個接口後面帶了一對花括號,那麼這個就表示實際上如今new的是這個接口的實現類。可是發現,這個實現類是沒有名字的,因此這個實現類叫匿名類。多線程

匿名類繼承父類
class Add
{
    public int add(int a, int b)
    {
        return a + b;
    };
}
class Demo
{
    int c = 6;
    Add add = new Add() //匿名類
    {
        public int add(int a, int b)
        {
            return super.add(2,3) + c;
        }
    };
}

這裏的匿名類用到了類外的變量c,上文中的變量能夠在匿名類中使用。那麼上面的問題也就解決了,上面的類傳入了參數klass,那麼匿名類就能夠直接使用該參數。ide

匿名類的特色
  • 匿名內部類顧名思義就是沒有名字的內部類。
  • 由於沒有名字,因此匿名內部類只可使用一次。
  • 匿名內部類經常使用來簡化代碼的編寫。
  • 使用內部類有一個前提條件,必須繼承父類或實現一個接口。
  • 匿名內部類經常用於多線程。

總結

這篇博客寫了很久,一開始一點都看不懂,面對許多專業名詞,我真的是一臉懵,是真的一臉懵,後來問了問學長,總算是理解了那麼一點,但願此次的學習能給之後帶來許多便利吧。函數

引用

感謝這些文章的做者的分享
java匿名類的定義
匿名類
Java之匿名內部類詳解學習

相關文章
相關標籤/搜索