激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - Java教程 - 詳細分析Java內(nèi)部類——局部內(nèi)部類

詳細分析Java內(nèi)部類——局部內(nèi)部類

2020-08-21 11:13弗蘭克的貓 Java教程

這篇文章主要介紹了Java局部內(nèi)部類的相關(guān)資料,幫助大家更好的理解和學習Java 內(nèi)部類的知識,感興趣的朋友可以了解下

  今天介紹第二種內(nèi)部類——局部內(nèi)部類。

  局部內(nèi)部類是什么?顧名思義,那就是定義在局部內(nèi)部的類(逃)。開玩笑的,局部內(nèi)部類就是定義在代碼塊、方法體內(nèi)、作用域(使用花括號“{}”括起來的一段代碼)內(nèi)的類。局部內(nèi)部類有以下特性:

  1. 局部內(nèi)部類只能在代碼代碼塊、方法體內(nèi)和作用域中使用。
  2. 局部內(nèi)部類同樣可以無限制調(diào)用外部類的方法和屬性。
  3. 可以使用abstract修飾,聲明為抽象類。

  舉個栗子:

?
1
2
3
4
5
6
7
8
9
10
11
public class Outer2 {
  public void print(){
    class Inner2{
      public void test(){
        System.out.println("Inner.print()");
      }
    }
    Inner2 inner2 = new Inner2();
    inner2.test();
  }
}
?
1
2
3
4
5
6
public class Test {
  public static void main(String[] args) {
    Outer2 outer2 = new Outer2();
    outer2.print();
  }
}

  這里的Inner2類僅僅在Outer2的print方法中被使用,有效范圍也僅在print函數(shù)之內(nèi)。

  通過這段玩具代碼,可能無法理解為什么java中要出現(xiàn)這樣限制這么多而且挺復(fù)雜的東西。讓我們來看看之前的栗子:Java中的回調(diào)

  這里把代碼復(fù)制過來:

?
1
2
3
4
5
6
7
public class TimePrinter implements ActionListener {
  @Override
  public void actionPerformed(ActionEvent e) {
    Date now = new Date();
    System.out.println("Time is " + now + " now.");
  }
}
?
1
2
3
4
5
6
7
8
9
public class Test {
  public static void main(String[] args) {
    ActionListener listener = new TimePrinter();
    Timer t = new Timer(1000,listener);
    t.start();
    JOptionPane.showMessageDialog(null,"Quit program?");//彈出對話框,防止主線程結(jié)束導(dǎo)致時鐘結(jié)束
    System.exit(0);
  }
}

  在這里,我們想要創(chuàng)建一個Timer時,需要往里面?zhèn)魅胍粋€實現(xiàn)了ActionListener接口的對象,而這個對象僅僅在該方法中使用了一次,這時候內(nèi)部類的優(yōu)勢就體現(xiàn)出來了,把類封裝在方法中,不向外界提供任何冗余信息:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class Test {
  public static void main(String[] args) {
    class InnerTimePrinter implements ActionListener {
      @Override
      public void actionPerformed(ActionEvent e) {
        Date now = new Date();
        System.out.println("Time is " + now + " now.");
      }
    }
    ActionListener listener = new InnerTimePrinter();
    Timer t = new Timer(1000,listener);
    t.start();
    JOptionPane.showMessageDialog(null,"Quit?");
    System.exit(0);
  }
}

  你也許會覺得,這樣好像只是把類簡單的挪到了另一個類里面,并沒有什么luan用。

  表面上,確實如此,但事實上,還是有很多l(xiāng)uan用的。

  在《Think in java》中有這樣一句話:使用內(nèi)部類最吸引人的原因是:每個內(nèi)部類都能獨立地繼承一個(接口的)實現(xiàn),所以無論外圍類是否已經(jīng)繼承了某個(接口的)實現(xiàn),對于內(nèi)部類都沒有影響。

  我們都知道,java中是不能實現(xiàn)多繼承的,接口也正是為了對多繼承的補充完善給出的方案。而我們程序設(shè)計中有時候會存在一些使用接口很難解決的問題,這個時候我們可以利用內(nèi)部類提供的、可以繼承多個具體的或者抽象的類的能力來解決這些程序設(shè)計問題。可以說,接口只是解決了部分問題,而內(nèi)部類使得多重繼承的解決方案變得更加完整。

  據(jù)個人經(jīng)驗,局部內(nèi)部類確實用的不多,但不常用不代表沒有用,知道有這樣一個神奇的內(nèi)部類存在,了解過它的特性之后,可以為你日后的需求提供更多的方案。

  至此,本篇講解完畢,歡迎大家繼續(xù)關(guān)注!

以上就是詳細分析Java內(nèi)部類——局部內(nèi)部類的詳細內(nèi)容,更多關(guān)于Java 局部內(nèi)部類的資料請關(guān)注服務(wù)器之家其它相關(guān)文章!

原文鏈接:https://cloud.tencent.com/developer/article/1016590

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 久久精品视频8 | 男男羞羞视频网站国产 | 国产一级91 | 中文字幕网站在线 | 国产精品久久久久一区二区 | 国产91porn | 超级av在线 | 国产精品久久久久久238 | 久久久国产精品免费观看 | 久草在线新时代视觉 | v天堂在线视频 | 2019亚洲日韩新视频 | 激情九九 | 国产精品亚洲综合一区二区三区 | 成人毛片视频免费 | 欧美成人精品一区二区三区 | 国产亚洲网| 欧美另类视频在线 | 色97在线| 斗破苍穹在线免费 | 久久精品视频6 | 99精品视频一区二区三区 | 久久精品九九 | 亚洲看片网| 大西瓜永久免费av在线 | 精品一区二区久久久久久久网精 | 黄网站色成年大片免费高 | 久久精热| 2021av视频| 一级毛片播放 | 黄视频网站免费 | 精品国产一区二 | 国产一级做a爱片在线看免 2019天天干夜夜操 | 91高清视频在线观看 | 精品国产一区二区亚洲人成毛片 | 中文字幕亚洲一区二区三区 | 欧美成人午夜影院 | 亚洲福利在线免费观看 | 污黄视频在线观看 | hd极品free性xxx一护士 | 欧美91看片特黄aaaa |