內部類:在一個類的內部,再定義一個類。
eg:A類中定義一個B類,B類就是A類的內部類,A類就是B類的外部類。
分為:
-
成員內部類
-
靜態內部類
-
局部內部類
-
匿名內部類
成員內部類
在類的內部寫一個類,這個內部類可以訪問其對應的外部類的私有和公有屬性和方法。
創建內部類對象語法:
step1: 外部類名 obj1 = new 外部類名();
step2: 外部類名.內部類名 obj2 = obj1.new 內部類名();
package com.WZ.Demo.Application;
public class Application {
public static void main(String[] args) {
//創建內部類對象
//step1 外部類名 obj1 = new 外部類名();
Outer obj1 = new Outer();
//step2 外部類名.內部類名 obj2 = obj1.new 內部類名();
Outer.Inner obj2 = obj1.new Inner();
obj1.out();
obj2.in();
obj2.getID();
}
}
2、Outer類
package com.WZ.Demo.Application;
public class Outer {
private int id = 3;
public void out(){
System.out.println("這個是外部類的方法");
}
public class Inner{
public void in(){
System.out.println("這個是內部類的方法");
}
//測試是否能獲得外部類的私有屬性
public void getID(){
System.out.println("外部類的私有屬性: "+id);
}
}
}
靜態內部類
在剛剛成員內部類的基礎上,public class Inner{ }上,加static關鍵字修飾。
與成員內部類的區別為:
-
內部類無法使用外部類的非靜態成員。原因為:static加載時就有了,而外部類的非靜態變量此時還不存在。
-
內部類依然可以使用外部類的靜態成員。
局部內部類
在外部類的方法中,寫的類,叫局部內部類。
package com.WZ.Demo.Application;
public class Outer {
public void method{
class Inner{
public void in(){}
}
}
}
匿名內部類
實例化對象的時候,不把名字賦值給變量,而是直接使用。語法為:new 類名.方法名();
1、main()
package com.WZ.Demo.Application;
public class Application {
public static void main(String[] args) {
new Person().show(); //匿名內部類
}
}
2、Person類
package com.WZ.Demo.Application;
public class Person {
public void show() {
System.out.println("匿名內部類");
}
}