將乙個類定義在另乙個給類裡面或者方法裡面,這樣的類就被稱為內部類。
內部類可以分為四種:成員內部類、區域性內部類、匿名內部類、靜態內部類,下面我們逐一介紹這四種內部類。
下面我們先介紹乙個普通的內部類
public
class
innerclasstest
}
我們來說一下內部類的作用以便以後我們什麼時候去用內部類
1.內部類提供了更好的封裝,可以把內部類隱藏在外部類之內,不允許同乙個包中的其他類訪問該類
2.內部類的方法可以直接訪問外部類的所有資料,包括私有的資料
3.內部類所實現的功能使用外部類同樣可以實現,只是有時使用內部類更方便
對於該成員變數,其生命週期和物件的生命週期一致,作用域在整個類中都可以使用,呼叫形式:使用物件呼叫。
成員內部類可以無條件訪問外部類的屬性和方法,但是外部類想要訪問內部類屬性或方法時,必須要建立乙個內部類物件,然後通過該物件訪問內部類的屬性或方法。
public
class
practice
}public
static
void
main
(string[
] args)
}
可用的修飾符:public private protected static final
private int count;
//private修飾後,該類就只能在當前類中使用
//static修飾後,該類的生命週期和外部類的生命週期一致,就失去了內部類本身的意義
//final修飾後,該類無法被繼承
定義在方法中的類,生命週期和方法的生命週期一致,作用域只在方法中。
但是我們的區域性內部類怎麼使用呢?
區域性變數只能在方法中使用
//直白的說區域性內部類就是方法中再建立乙個類以及屬性跟方法
//當我們想在method方法中呼叫內部類中的show方法時,只能在方法中建立乙個inner物件呼叫非靜態類
public
void
method()
} inner inner =
newinner()
;//建立內部類物件
inner.
show()
;//這裡就能在呼叫method方法時也可以使用區域性內部類中的方法了
}
public
static
void
main
(string[
] args)
public
static
void
change()
}}}
概念:本身是沒有名字的類
前提:1.匿名內部類必須繼承乙個抽象類或者實現乙個介面
2.匿名內部類沒有構造方法,因為它沒有類名
語法 : 父類型別 變數名 = new父類型別(){};
是一種多型的向上轉型形式,限制了對子類特有方法的呼叫
只有當所使用的方法都是父類中的方法時才考慮使用匿名內部類,只要其中有乙個特有的方法就需要考慮建立乙個具體的類使用
public
class
niminginnerdemo
@override
public
void
eat()}
; animal.
eat();
animal.
sleep()
;}}inte***ce
animal
class
catimplements
animal
@override
public
void
sleep()
}
內部類 異常 包
1 內部類 內部類訪問規則 1 內部類可以訪問外部類的中的成員,包括私有。外部類不可以私有 之所以能訪問外部類是因為內部類中有外部類的引用,格式是 外部類名.this.2 外部類要訪問內部類,需要建立內部類的物件。如果在主函式中直接訪問內部類,需要把返回值型別寫成 外部類.內部類 變數名 new 外...
內部類 成員內部類 區域性內部類 匿名內部類
public class 外部類 private int num 0 外部類如果要訪問內部類的成員,則需要通過內部類的物件訪問 使用方式 1.外部類使用內部類,主函式再使用外部類 2.通過new的方式 外部類.內部類 物件名 new 外部類 new 內部類 定義在方法內部的類,就是區域性內部類,只有...
內部類(成員內部類 靜態內部類 方法內部類)
一 成員內部類 最常見的內部類就是成員內部類,也稱作普通內部類 2 inner類中定義的test 方法可以訪問outer類中的資料,不受訪問控制符的影響。3 定義了成員內部類後,必須使用外部類物件來建立內部類物件,而不能直接去 new 乙個內部類物件,即 內部類 物件名 外部類物件.new 內部類 ...