一迎瞧、什么是內部類
將一個類定義在一個類的內部脓恕,這就是內部類烫沙。它隱式的持有了外部類的引用缆瓣,因此可以調用外部類的方法粹污。
二扑浸、創(chuàng)建內部類的引用
如果要從外部類的非靜態(tài)方法之外的某個位置創(chuàng)建內部類的對象襟交,需要指明:OuterClassName.InnerClassName:
public class A{
class B{
}
getB(){
return new B();
}
main{
A.B b=getB();
}
}
三歇拆、內部類和外部類的聯系
內部類有權限訪問外圍類對象的所有成員新啼,因為在內部類創(chuàng)建的時候它就隱式的拿到了外部類的引用追城。這些是由編譯器來完成的。
四燥撞、拿到外部類的引用
使用.this來拿到外部類的引用
public class DoThis {
private class Inner implement OnNameChange{
public DoThis getThis(){
return DoThis.this座柱、、
}
public void getName(){
//OnNameChange接口的方法
}
}
public Inner getInner(){
return new Inner();
}
public void getName(){
new Inner ().getName()叨吮;
}
}
使用.new方法創(chuàng)建內部類的引用辆布,不過需要外部類的引用
例如上例中:
DoThis do2=new DoThis()
DoThis.Inner inner=do2.new Inner();
外部類提供一個返回內部類對象的方法
getInner()方法
五、內部類可以獨自繼承和實現其他的接口和類茶鉴,不受外圍類的影響锋玲,使java的多重繼承更加完善。
六涵叮、閉包:一個可調用的對象記錄了創(chuàng)建它的作用域的信息惭蹂。
在java中的閉包就是內部類,因為內部類可以通過外圍類的引用來創(chuàng)建并且隱式的持有了外圍類的引用割粮。
七盾碗、內部類是不可以被覆蓋的
八、局部內部類
局部內部類:在方法里創(chuàng)建一個內部類舀瓢,不能有訪問修飾符廷雅。因為它不是外圍類的部分。
九、內部類的好處
1.可以遮蔽實現航缀,即外部沒有辦法直接調用實現的對象商架。比如getName方法的實現 實際上是有一個私有的內部類的getName方法來完成,而這個Inner對象是沒有辦法訪問到的芥玉。
2.當DoThis類想要實現OnNameChange方法,但是這個接口的getName方法和DoThis自身的方法名重復時可以使用內部類來實現接口灿巧。外部類調用內部類的實現即可赶袄。