日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

java外部类_Java里什么叫内部类什么叫外部类

發(fā)布時間:2025/3/11 java 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java外部类_Java里什么叫内部类什么叫外部类 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

展開全部

對普通類(沒有內(nèi)部類的類)來說,62616964757a686964616fe78988e69d8331333337396234內(nèi)部類和外部類都與他無關(guān);對有內(nèi)部類的類來說,它們就是其內(nèi)部類的外部類,外部類是個相對的說法,其實就是有內(nèi)部類的類。

所以,要回答這個問題,只需要講解內(nèi)部類是什么:

Java中的內(nèi)部類共分為四種:

靜態(tài)內(nèi)部類static inner class (also called nested class)

成員內(nèi)部類member inner class

局部內(nèi)部類local inner class

匿名內(nèi)部類anonymous inner class

靜態(tài)內(nèi)部類Static Inner Class

最簡單的內(nèi)部類形式。

類定義時加上static關(guān)鍵字。

不能和外部類有相同的名字。

被編譯成一個完全獨立的.class文件,名稱為OuterClass$InnerClass.class的形式。

只可以訪問外部類的靜態(tài)成員和靜態(tài)方法,包括了私有的靜態(tài)成員和方法。

生成靜態(tài)內(nèi)部類對象的方式為:

OuterClass.InnerClass inner = new OuterClass.InnerClass();

示例代碼:

package com.learnjava.innerclass;

class StaticInner

{

private static int a = 4;

// 靜態(tài)內(nèi)部類

public static class Inner

{

public void test()

{

// 靜態(tài)內(nèi)部類可以訪問外部類的靜態(tài)成員

// 并且它只能訪問靜態(tài)的

System.out.println(a);

}

}

}

public class StaticInnerClassTest

{

public static void main(String[] args)

{

StaticInner.Inner inner = new StaticInner.Inner();

inner.test();

}

}

成員內(nèi)部類Member Inner Class

成員內(nèi)部類也是定義在另一個類中,但是定義時不用static修飾。

成員內(nèi)部類和靜態(tài)內(nèi)部類可以類比為非靜態(tài)的成員變量和靜態(tài)的成員變量。

成員內(nèi)部類就像一個實例變量。

它可以訪問它的外部類的所有成員變量和方法,不管是靜態(tài)的還是非靜態(tài)的都可以。

在外部類里面創(chuàng)建成員內(nèi)部類的實例:

this.new Innerclass();

在外部類之外創(chuàng)建內(nèi)部類的實例:

(new Outerclass()).new Innerclass();

在內(nèi)部類里訪問外部類的成員:

Outerclass.this.member

示例代碼:

package com.learnjava.innerclass;

class MemberInner

{

private int d = 1;

private int a = 2;

// 定義一個成員內(nèi)部類

public class Inner2

{

private int a = 8;

public void doSomething()

{

// 直接訪問外部類對象

System.out.println(d);

System.out.println(a);// 直接訪問a,則訪問的是內(nèi)部類里的a

// 如何訪問到外部類里的a呢?

System.out.println(MemberInner.this.a);

}

}

}

public class MemberInnerClassTest

{

public static void main(String[] args)

{

// 創(chuàng)建成員內(nèi)部類的對象

// 需要先創(chuàng)建外部類的實例

MemberInner.Inner2 inner = new MemberInner().new Inner2();

inner.doSomething();

}

}

局部內(nèi)部類Local Inner Class

局部內(nèi)部類定義在方法中,比方法的范圍還小。是內(nèi)部類中最少用到的一種類型。

像局部變量一樣,不能被public, protected, private和static修飾。

只能訪問方法中定義的final類型的局部變量。

局部內(nèi)部類在方法中定義,所以只能在方法中使用,即只能在方法當(dāng)中生成局部內(nèi)部類的實例并且調(diào)用其方法。

示例代碼:

package com.learnjava.innerclass;

class LocalInner

{

int a = 1;

public void doSomething()

{

int b = 2;

final int c = 3;

// 定義一個局部內(nèi)部類

class Inner3

{

public void test()

{

System.out.println("Hello World");

System.out.println(a);

// 不可以訪問非final的局部變量

// error: Cannot refer to a non-final variable b inside an inner

// class defined in a different method

// System.out.println(b);

// 可以訪問final變量

System.out.println(c);

}

}

// 創(chuàng)建局部內(nèi)部類的實例并調(diào)用方法

new Inner3().test();

}

}

public class LocalInnerClassTest

{

public static void main(String[] args)

{

// 創(chuàng)建外部類對象

LocalInner inner = new LocalInner();

// 調(diào)用外部類的方法

inner.doSomething();

}

}

匿名內(nèi)部類Anonymous Inner Class

匿名內(nèi)部類就是沒有名字的局部內(nèi)部類,不使用關(guān)鍵字class, extends, implements, 沒有構(gòu)造方法。

匿名內(nèi)部類隱式地繼承了一個父類或者實現(xiàn)了一個接口。

匿名內(nèi)部類使用得比較多,通常是作為一個方法參數(shù)。

生成的.class文件中,匿名類會生成OuterClass$1.class文件,數(shù)字根據(jù)是第幾個匿名類而類推。

示例代碼:

package com.learnjava.innerclass;

import java.util.Date;

public class AnonymouseInnerClass

{

@SuppressWarnings("deprecation")

public String getDate(Date date)

{

return date.toLocaleString();

}

public static void main(String[] args)

{

AnonymouseInnerClass test = new AnonymouseInnerClass();

// 打印日期:

String str = test.getDate(new Date());

System.out.println(str);

System.out.println("----------------");

// 使用匿名內(nèi)部類

String str2 = test.getDate(new Date()

{

});// 使用了花括號,但是不填入內(nèi)容,執(zhí)行結(jié)果和上面的完全一致

// 生成了一個繼承了Date類的子類的對象

System.out.println(str2);

System.out.println("----------------");

// 使用匿名內(nèi)部類,并且重寫父類中的方法

String str3 = test.getDate(new Date()

{

// 重寫父類中的方法

@Override

@Deprecated

public String toLocaleString()

{

return "Hello: " + super.toLocaleString();

}

});

System.out.println(str3);

}

}

已贊過

已踩過<

你對這個回答的評價是?

評論

收起

總結(jié)

以上是生活随笔為你收集整理的java外部类_Java里什么叫内部类什么叫外部类的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。