Object類是所有類的基類,要注意使用equals()方法,默認比較地址。
---------------------------------------------------------------------------------------------------------------
內部類:
class Outer{
class Inner{ }
}
---------------------------------------------------------------------------------------------------------------
對於內部類:
1.可以直接訪問外部類成員(包括private成員),內部類持有外部類的引用:Outer.this
2.外部類要訪問內部類,必須建立內部類對象:Outer.Inner in=new Inner();
3.內部類可以被私有修飾
非私有內部類可以在外部其他類直接創建對象:
Outer.Inner in=new Outer().new Inner();
---------------------------------------------------------------------------------------------------------------
靜態內部類:
內部類具有static特性
特點:只能直接訪問外部類中的static成員,出現了訪問權限
外部其他類訪問static 內部類:
new Outer.Inner().function();
訪問static方法:
Outer.Inner.function();
注意:當內部類中定義了靜態成員,該內部類必須是靜態的。
當外部類中靜態方法訪問內部類時,內部類也必須是靜態的。
內部類定義在局部時,
1.不可以被成員修飾符修飾;
2.可以直接訪問外部類中的成員,但不能訪問它所在局部中的變量,只能訪問final修飾的局部變量
method(){
final int x=3;
class{
sop(x);
}
}
---------------------------------------------------------------------------------------------------------------
內部類定義原則:
當描述事物時,事物的內部還有事物,該事物用內部類來描述,因爲內部事物
在使用外部事物的內容
---------------------------------------------------------------------------------------------------------------
匿名內部類:
class Outer{
class{}
}
---------------------------------------------------------------------------------------------------------------
定義前提:內部類必須繼承一個類/接口
abstract clas AbsDemo{
abstract void show();
}
class Outer{
new AbsDemo{ //對象:AbsDemo子類對象(簡化書寫,覆蓋方法)
void show(){
sop(...);
}
}.show();//調用show()
}
匿名內部類定義的方法最好不要超過3個;
無意義的使用方式:
AbsDemo d=new AbsDemo(){ };
雖有多態的味道,但d中無法調用父類未定義的方法,只能是用父類方法;
---------------------------------------------------------------------------------------------------------------
如何理解Test.function().method():
可直接使用Test.function(),則該function()爲Test的靜態方法
後調用method(),可見Test function()返回的是一個對象
則有兩種可能,function()內組合了其他外部類,或者內部使用了匿名內部類
此處研究匿名內部類:代碼如下:
interface Inter{ public void method();}
class Test{
public Inter function(){
return new Inter(){
public void method{...};
}
}