999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

淺析Java語言中的內部類和匿名類

2008-12-31 00:00:00吳金秀
電腦知識與技術 2008年29期

摘要:內部類是定義在一個類內,它有靜態內部類與非靜態內部類兩種。內部類可以訪問外部類的成員,但外部類不能直接訪問內部類的成員。由內部類可以引申出匿名內部類,匿名內部類在處理事件時是非常方便的。

關鍵詞:內部類;內部匿名類;外部類

中圖分類號:TP311文獻標識碼:A文章編號:1009-3044(2008)29-0400-02

Analysis of the Internal Category and Anonymous Category in the Java Language

WU Jin-xiu

(Huanggang Polytechnic College,Huanggang 438002,China)

Abstract: Internal category is defined in a category. It can be classified as static category and non-static category. Internal class can access the external members, but external class can't access the internal members directly. The anonymous internal class can be extended from the internal one, and it is very convenient to deal with all events.

Key words: internal category; anonymous internal category; external category

1 引言

內部類是指把一個類定義在另一個類的類體中。里面的類被稱為內部類。內部類作為外部類的一個成員而存在的。內部類可用靜態修飾,也可用protected和 private修飾。通過內部類可以繼承某個類或實現某個接口,以減少程序代碼和增強程序可讀性;內部類都能獨立地實現接口,如果外部類實現了某接口,這時的內部類相當于實現了“多重繼承”。Java語言中只支持“單重繼承”,利用接口解決了多重繼承的問題,而內部類也有效地實現了“多重繼承”。

2 內部類

內部類有靜態內部類和非靜態內部類之分。

2.1 非靜態內部類

非靜態內部類可以直接使用外部類的成員,可用public/private/default權限修飾符,但不能定義靜態成員。例:

publicclassOuter {

inti = 10;

static intj = 20;

publicvoidouter_f1() {}

publicstaticvoidouter_f2() {}

class Inner {

voidinner_f1() {

inti = 30;

System.out.println(Outer.this.i);

System.out.println(j);

outer_f1();

outer_f2(); }}

1) 在內部類中,訪問外部類的成員

在內部類Inner中,可以直接訪問外部類Outer的成員。

①直接訪問外部類的成員變量。如在方法inner_f1()中:System.out.println(j); System.out.println(i);

②直接訪問外部類的成員。如在Inner類中:outer_f1(); outer_f2();

③ 如果內部類中出現了與外部類同名的變量,則對于外部類同名的變量的訪問形式為:外部類名.this.變量名,如方法inner_f1()中訪問外部類的變量i:System.out.println(Outer.this.i);

2) 在外部類中,訪問內部類中的成員

①外部類的非靜態方法訪問內部類,可以直接通過內部類的對象進行訪問,如在Outer類中訪問Inner類的方法inner_f1:

publicvoidouter_f3() {

Inner inner = new Inner();

inner.inner_f1(); }

②外部類的靜態方法訪問成員內部類,可以通過內部類的對象進行訪問,但創建內部類的對象必須通過外部類的對象來創建,如在Outer類中訪問Inner類的方法inner_f2:

publicstaticvoidouter_f4() {

Outer out = new Outer();

Inner inner = out.new Inner();

inner.inner_f1();}

注意:內部類是一個編譯時的概念,一旦編譯成功生成兩個類。outer.class和outer$inner.class兩類。

2.2 靜態內部類(嵌套類)

非靜態內部類的對象隱含地保存了一個引用指向創建它的外部類對象。當不需要內部類對象與其外部類對象之間有聯系,將內部類聲明為static,通常稱為嵌套類。靜態內部類可以用public,protected,private修飾,靜態內部類中可以定義靜態或者非靜態的成員。與非靜態內部類的區別在于要創建靜態內部類的對象,不需要通過其外部類的對象來創建;靜態內部類的對象不能訪問外部類的非靜態成員。

publicclass Outer {

staticinti = 10;

inj = 20;

publicstaticvoidouter_f1() { }

publicvoidouter_f2 ( ) { }

static classInner {

staticintinner_i = 30;

intinner_j = 40;

static void inner_f1() {

System.out.println(\"Outer.i\" + i);

outer_f1(); }

void inner_f2() {}}

publicvoidouter_f3() {

System.out.println(Inner.inner_i);

Inner.inner_f1();

Inner inner = new Inner();

inner.inner_f2(); }}

2.2.1 靜態內部類中訪問外部類的成員

1) 靜態內部類只能訪問外部類的靜態成員

如在inner_f1()中訪問了外部類的靜態成員變量i和靜態成員方法outer_f1()。

2) 靜態內部類不能訪問外部類的非靜態成員

如在inner_f1()中不能訪問了外部類的靜態成員變量i和靜態成員方法outer_f1()。

2.2.2 外部類訪問內部類的成員

1) 外部類訪問內部類的靜態成員

外部類訪問內部類的靜態成員的形式為:內部類.靜態成員,如方法outer_f3()中Inner.inner_i。

2) 外部類訪問內部類的非靜態成員

外部類訪問內部類的非靜態成員通過內部類的對象進行。如:方法outer_f3()中Inner inner = new Inner();inner.inner_f2();先創建內部類的對象inner,然后通過inner來訪問innner_f2()。

2.2.3 靜態內部類的對象

可以直接創建:Outer.Inner in = new Outer.Inner(); 而不需要通過生成外部類對象來生成。實際上靜態內部類成為了一個頂級類(是一個包含內部類而它自己并沒有被嵌套到其他類中的類)。

3 匿名內部類

沒有類名的內部類就是匿名類。通常用一條語句完成匿名類的定義與實例創建。

3.1 什么時候使用匿名類

類定義代碼段很短;只需要創建該類的一個實例;類的定義代碼與類的使用代碼緊鄰。使用匿名內部類是應注意:匿名內部類不能有構造方法;不能定義任何靜態成員、方法和類;不能是public,protected,private,static。

3.2 匿名內部類

一個匿名內部類一定是在new的后面,用其隱含實現一個接口或繼承一個類。

下面的例子完成窗口的關閉功能,由內部類改為匿名類來實現:

例1:用內部類窗口的關閉事件。

import java.awt.*;

import java.awt.event.*;

public class TestWindowClose extends Frame

{ public TestWindowClose()

{super();

addWindowListener(new WindowClose());

setSize(200,100);

setVisible(true);}

class WindowClose extends WindowAdapter

{public void windowClosing(WindowEvent e)

{ dispose();System.exit(0);}

}

public static void main(String[] args)

{TestWindowClose t=new TestWindowClose(); }

}

例2:改用匿名內部類來實現窗口的關閉事件,代碼如下。

import java.awt.*;import java.awt.event.*;

public class TestWindowClose extends Frame

{ public TestWindowClose()

{super();

addWindowListener(new WindowAdapter()

{public void windowClosing(WindowEvent e)

{ dispose(); System.exit(0); }} );

setSize(200,100);setVisible(true);}

public static void main(String[] args)

{TestWindowClose t=new TestWindowClose();}

}

4 結束語

內部匿名類可提高程序的可讀性,減少程序代碼,使程序結構緊湊。

參考文獻:

[1] Java內部類總結[EB/OL].http://www.chinabeta.cn.

[2] 朱喜福.Java程序設計[M].北京:清華大學出版社,2004.

主站蜘蛛池模板: 99re66精品视频在线观看| 澳门av无码| 99久久国产自偷自偷免费一区| 波多野结衣在线se| 57pao国产成视频免费播放| 日韩视频免费| 黄网站欧美内射| 日本黄色不卡视频| 精品综合久久久久久97| 亚洲国产黄色| 亚洲国产中文欧美在线人成大黄瓜 | 亚洲精品国产综合99久久夜夜嗨| 91免费国产高清观看| 高h视频在线| 国产精品30p| 国产一区成人| 亚洲一区第一页| 色婷婷亚洲综合五月| 日韩成人在线视频| 爱色欧美亚洲综合图区| 亚洲乱码在线视频| 伊人福利视频| 99热国产在线精品99| 日韩视频精品在线| 日本人真淫视频一区二区三区| 日本一区高清| 欧美黑人欧美精品刺激| www.youjizz.com久久| 国内精品一区二区在线观看| 亚洲第一成年网| 伊人婷婷色香五月综合缴缴情| 日本a级免费| 国产在线自乱拍播放| 91久久夜色精品| 88av在线| 1级黄色毛片| 欧美高清国产| 波多野结衣无码AV在线| AV网站中文| 无码久看视频| 91麻豆精品视频| 国产精品漂亮美女在线观看| 狠狠色丁香婷婷综合| 亚洲一区精品视频在线| 无码国产伊人| 久久6免费视频| 精品国产aⅴ一区二区三区| 国产一级毛片网站| 五月天香蕉视频国产亚| 伊在人亚洲香蕉精品播放| 久久综合亚洲色一区二区三区| 色欲国产一区二区日韩欧美| 成人一区在线| 91破解版在线亚洲| 中文字幕在线看视频一区二区三区| 亚洲成a人在线观看| 国产在线自在拍91精品黑人| 国产91精品久久| 久热re国产手机在线观看| 一本无码在线观看| 99国产在线视频| 19国产精品麻豆免费观看| 免费一看一级毛片| 国产91久久久久久| 欧美精品伊人久久| 色综合天天视频在线观看| 日韩激情成人| 2048国产精品原创综合在线| 黄片在线永久| 国产精品污视频| 精品国产网| 538国产视频| 26uuu国产精品视频| a级免费视频| 色婷婷在线影院| 亚洲va在线∨a天堂va欧美va| 狠狠干综合| 国产成人AV男人的天堂| 亚洲欧美成人综合| 91精品综合| 国产精品综合久久久| 亚洲男人天堂网址|