在乙個類中書寫另乙個類
同級類(嚴格意義上來講只是一種書寫形式不是內部類)
成員內部類(全域性內部類)
區域性內部類(包含匿名內部類)
在當前類同級下繼續書寫其他類,書寫語法與普通類相同,但修飾符只能使用預設
在使用時與普通類一致,只是訪問範圍只有本包下,將相當於少建立了乙個檔案
//員工類
public
abstract
class
employee
// 同級類的形式
class
sale
extends
employee
system.out.
println
("銷售員"
+name+month+
"月份的工資為:"
+salary);}
}
書寫在類體中的類
修飾符 class 類名稱
//...
}
public
classa}
public
voida(
)}class
a1}
成員內部類總結:
1、書寫在類體中的類
2、只能由當前類的外部類直接訪問
3、可以直接訪問外部類(其他外部類)
4、使用同名外部類變數時注意語法 外部類.this.屬性名
5、其他外部類訪問方式 間接方式(建立外部類通過外部類方法使用內部類) 直接方式(通過外部類直接建立內部類物件)
如果類是定義在乙個方法內部的,那麼這就是乙個區域性內部類。
「區域性」:只有當前所屬的方法才能使用它,出了這個方法外面就不能用了。
修飾符 class 外部類名稱
}}
public
classb}
c c =
newc()
; c.c(
);}public
voidb1(
)public
static
void
main
(string[
] args)
}
區域性內部類總結:
1、書寫在方法體中的類
2、只能由當前方法直接訪問
3、可以直接訪問外部類(其他外部類)
4、使用同名方法所在類變數時注意語法 外部類.this.屬性名(對於方法中同名屬性不能直接呼叫建議改名)
5、其他外部類(方法)訪問方式 間接方式(通過訪問方法的形式進行呼叫)
6、區域性內部類使用方法中變數的值實際過程是建立空間將值複製過來進行使用,要求變數理論不變的原因,是因為**時機不同,可能導致程式錯誤(區域性內部類不建議使用方法中的屬性進行屬性的賦值)
修飾內部類的許可權
public > protected > (default) > private
定義乙個類的時候,許可權修飾符規則:
外部類:public / (default)
成員內部類:都可以寫,public > protected > (default) > private
區域性內部類:什麼都不能寫,但不是default
匿名內部類
屬於區域性內部類,書寫在方法中但建立類無需類名與class關鍵字,只需要書寫方法體{}
如果介面的實現類(或者是父類的子類)只需要使用唯一的一次。
那麼這種情況下就可以省略調該類的定義,而改為使用【匿名內部類】。
匿名內部類用於建立子類或者實現類
介面(父類) 物件名 =
new 類名或者介面名稱(
);
public
inte***ce
cclass
test
//一般用於只使用一次的子類或實現類
c c=
newc()
@override
public
voidb(
)@override
public
voidc(
)};//會直接使用匿名內部類建立乙個唯一物件
//這個物件只有乙個,因為沒有類
//相當於使用類體臨時建立了乙個類並用其建立物件
c.a(
);}}
匿名物件:
建立的物件只呼叫一次方法那麼可以直接使用new 類名().方法()進行使用
注意:匿名物件與匿名內部類不是同乙個東西
匿名物件省略了類的宣告
匿名內部類省略了class關鍵字以及類名
匿名內部類總結
1、匿名內部類由於沒有建立類,所以使用父類或者介面宣告變數儲存遵循多型,只能使用重寫的方法以及父類的屬性,但是重寫的方法可以使用這些屬性,只不過不能通過物件進行賦值,(一般在使用匿名內部類的時候不會建立屬性只重寫方法)
內部類,匿名內部類
內部類 概念 自己想到的 內部類是一種可以直接訪問外部類的一類事物 內部類訪問外部類中的成員,包括私有。之所以可以訪問外部類的成員,是因為內部類持有了外部類的乙個引用,格式為 outer.this.x 外部類訪問內部類成員,需要宣告內部類的物件。其他類訪問內部類方法 當內部類處在成員變數的位置時,就...
內部類 匿名內部類
把類定義在其他類的內部,這個類就叫內部類。內部類分為 成員內部類 區域性內部類。內部類訪問特點 內部類可以直接訪問外部類的成員,包括私有。外部類訪問內部類的成員,必須建立物件。區域性內部類是定義在乙個方法或者乙個作用域裡面的類。public class outer 在區域性位置建立內部類物件,調內部...
內部類 匿名內部類
package org.lgy.study.innerclass public class anonymoustest public static void main string args public string getname public double getprice inte ce p...