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

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

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

java

java内部类写法_Java学习-内部类

發(fā)布時(shí)間:2024/10/8 java 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java内部类写法_Java学习-内部类 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、概念

內(nèi)部類(lèi):在一個(gè)類(lèi)的內(nèi)部定義的一個(gè)類(lèi);

分類(lèi): 可以分為 成員內(nèi)部類(lèi)、局部?jī)?nèi)部類(lèi)、匿名內(nèi)部類(lèi)和靜態(tài)內(nèi)部類(lèi);

《Think in java》):

1、內(nèi)部類(lèi)可以用多個(gè)實(shí)例,每個(gè)實(shí)例都有自己的狀態(tài)信息,并且與其他外圍對(duì)象的信息相互獨(dú)立。

2、在單個(gè)外圍類(lèi)中,可以讓多個(gè)內(nèi)部類(lèi)以不同的方式實(shí)現(xiàn)同一個(gè)接口,或者繼承同一個(gè)類(lèi)。

3、創(chuàng)建內(nèi)部類(lèi)對(duì)象的時(shí)刻并不依賴(lài)于外圍類(lèi)對(duì)象的創(chuàng)建。

4、內(nèi)部類(lèi)并沒(méi)有令人迷惑的“is-a”關(guān)系,他就是一個(gè)獨(dú)立的實(shí)體。

5、內(nèi)部類(lèi)提供了更好的封裝,除了該外圍類(lèi),其他類(lèi)都不能訪(fǎng)問(wèn)。

二、各種內(nèi)部類(lèi)的介紹

1.成員內(nèi)部類(lèi)

特點(diǎn):

1.成員內(nèi)部類(lèi)可以直接訪(fǎng)問(wèn)外部類(lèi)的成員(包括private定義的成員),而外部類(lèi)不能直接訪(fǎng)問(wèn)內(nèi)部類(lèi)的成員屬性和方法。

2.成員內(nèi)部類(lèi)是依附在外部類(lèi),需要先創(chuàng)建外部類(lèi)對(duì)象才能創(chuàng)建內(nèi)部類(lèi)對(duì)象;

3.成員內(nèi)部類(lèi)區(qū)別于靜態(tài)內(nèi)部類(lèi),成員內(nèi)部類(lèi)中不能存在static的成員和方法;

//相對(duì)于內(nèi)部類(lèi),這是外部類(lèi)

public class Outer {

private int out = 1;//private的外部類(lèi)變量

public void OutPrint() {

System.out.println("Out:"+out);

}

//內(nèi)部類(lèi)

public class Inner {

int inn;

public void InPrint() {

System.out.println("In中的Out:"+out);//可以使用外部類(lèi)的成員變量

OutPrint();//可以使用外部類(lèi)的方法

}

}

//

}

public class Show {

public static void main(String[] args) {

Outer o = new Outer();//1.外部類(lèi)創(chuàng)建對(duì)象

Outer.Inner i = o.new Inner();//2.外部類(lèi)的對(duì)象創(chuàng)建后,創(chuàng)建內(nèi)部類(lèi)對(duì)象

//Inner i = new Inner();不會(huì)報(bào)錯(cuò)但是是無(wú)效定義方式

//Outer.Inner j = new Outer().new Inner();//結(jié)合1和2直接創(chuàng)建也是可行的

i.InPrint();

}

}

console結(jié)果:

In中的Out:1

Out:1

2.局部?jī)?nèi)部類(lèi)

概念: 定義在外部類(lèi)方法或作用域內(nèi)的類(lèi)

特點(diǎn):

1.局部?jī)?nèi)部類(lèi)可以直接訪(fǎng)問(wèn)外部類(lèi)的成員;

2.在局部位置可以創(chuàng)建局部?jī)?nèi)部類(lèi)對(duì)象,通過(guò)對(duì)象調(diào)用成員;

3. 局部?jī)?nèi)部類(lèi)在訪(fǎng)問(wèn)局部變量時(shí),被訪(fǎng)問(wèn)的變量必須用 final 修飾;

3.匿名內(nèi)部類(lèi)

簡(jiǎn)單寫(xiě)法:

new 父類(lèi)(){

重寫(xiě)方法;

};

new 接口(){

實(shí)現(xiàn)方法;

};

特點(diǎn):

1.匿名內(nèi)部類(lèi)我們必須是繼承一個(gè)父類(lèi)或者實(shí)現(xiàn)一個(gè)接口,不能是抽象的;

2.匿名內(nèi)部類(lèi)僅能被使用一次因?yàn)槟涿麅?nèi)部類(lèi)是直接使用new來(lái)生成一個(gè)對(duì)象的引用,該類(lèi)的定義會(huì)立即消失;

3.匿名內(nèi)部類(lèi)中是不能定義構(gòu)造函數(shù)的,匿名內(nèi)部類(lèi)中不能存在任何的靜態(tài)成員變量和靜態(tài)方法;

4.匿名對(duì)象可以作為實(shí)際參數(shù)傳遞;

5.如果定義了一個(gè)匿名內(nèi)部類(lèi),并且希望它使用一個(gè)其外部定義的參數(shù),那么編譯器會(huì)要求該參數(shù)引用是final的;

使用時(shí)機(jī): 當(dāng)一個(gè)對(duì)象只需要使用一次可以使用,匿名對(duì)象使用完畢就變成垃圾被回收;

//抽象類(lèi)

public abstract class Person {

String name;

int age;

public abstract void Print();

}

//接口

public interface PlayBall {

public abstract void Play();

}

//

public class Show {

//定義一個(gè)測(cè)試匿名類(lèi)對(duì)象可以作為形參傳遞的方法

public static void Test(Person pp) {

pp.Print();

}

public static void main(String[] args) {

//創(chuàng)建抽象類(lèi)的匿名內(nèi)部類(lèi)

new Person() {

public void Print() {

System.out.println("hello");

}

};

//使用new創(chuàng)建匿名內(nèi)部類(lèi)后,直接引用其成員

new Person() {

public void Print() {

System.out.println("hello");

}

}.Print();

//通過(guò)多態(tài)創(chuàng)建對(duì)象

Person a= new Person() {

public void Print() {

System.out.println("hello");

}

};

a.Print();

//匿名類(lèi)對(duì)象作為形參

Show.Test( new Person() {

public void Print() {

System.out.println("hello");

}

});

//創(chuàng)建接口的內(nèi)部類(lèi),同樣道理,可以通過(guò)多態(tài)創(chuàng)建對(duì)象

PlayBall p = new PlayBall() {

public void Play() {

System.out.println("踢足球");

}

};

p.Play();

}

}

console結(jié)果:

hello

hello

hello

踢足球

4.靜態(tài)內(nèi)部類(lèi)

使用static修飾的內(nèi)部類(lèi)

特點(diǎn):

1.不能訪(fǎng)問(wèn)任何外部類(lèi)的非static成員變量和方法

2.靜態(tài)內(nèi)部類(lèi)可以直接創(chuàng)建實(shí)例不需要依賴(lài)于外圍類(lèi)

總結(jié)

以上是生活随笔為你收集整理的java内部类写法_Java学习-内部类的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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