8.內部類

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{...};

}

}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章