內部類
- 內部類是什麼
- 內部類的類別
- 成員內部類
- 靜態內部類
- 匿名內部類
內部類是什麼
示例
package day20191106;
public class InClass {
/**
*類似這種的類就叫做內部類,顧名思義,就是存在於類內部的另一個類
*/
class InnerClass{
}
}
內部類的類別
-
成員內部類:地位相當於成員變量、成員方法
- 內部類的使用與外部類相似,但需要注意的是內部類中不能有static修飾的內容
- 內類中可以繼續寫內部類,但是一般不這麼寫
-
靜態內部類
-
匿名內部類(最常見,最實用)
-
局部內部類(已被淘汰)
成員內部類
成員內部類是什麼
示例
package day20191106;
public class ClassExample {
public class InnerClass{
public InnerClass(){
}
public int a;
public int b;
public void method1(){
}
public void method2(){
}
}
}
成員內部類的構造
- 有構造器
- 有變量
- 有方法
- 有代碼塊
- 可以使用外部類的屬性和方法
注意:成員內部類中不能有static修飾的內容,因爲成員內部類是對象內部的一個成員,對象被創建後纔會有成員內部類
成員內部類的對象創建
- 方式1
package day20191106;
//導入內部類
import day20191106.ClassExample.InnerClass;
public class Demo03 {
public static void main(String[] args) {
//創建外部類對象
ClassExample classExample = new ClassExample();
//使用外部類對象創建出內部類對象,方式與調用成員屬性、方法相同
InnerClass inner = classExample.new InnerClass();
}
}
- 方式2
package day20191106;
public class Demo03 {
public static void main(String[] args) {
ClassExample classExample = new ClassExample();
ClassExample.InnerClass inner = classExample.new InnerClass();
}
}
注意1:創建出內部類對象後,可以像普通對象一樣調用內部的屬性和方法
靜態內部類
靜態內部類是什麼
static修飾的成員內部類,示例如下:
package day20191106;
public class ClassExample {
public static class InnerClass{
public InnerClass(){
}
public int a;
public int b;
public void method1(){
}
public void method2(){
}
}
}
靜態內部類的特殊點
不能調用外部類的非靜態屬性、方法,其他與成員內部類相同
靜態內部類的對象創建
package day20191106;
public class Demo03 {
public static void main(String[] args) {
InnerClassB innerB = new ClassExample.InnerClassB();
}
}
匿名內部類
匿名內部類是什麼
一次性使用的一個實例化對象
匿名內部類的作用
實現一個接口或者繼承一個抽象類
匿名內部類的示例
package day20191106;
public class Demo03 {
public static void main(String[] args) {
//必須是抽象類或者接口
InterClass interClass = new InterClass(){
@Override
public void method1() {
// TODO Auto-generated method stub
}
@Override
public void method2() {
// TODO Auto-generated method stub
}
};
}
}
匿名內部類的使用
- 可以使用局部變量,局部變量必須被final修飾
- 可以使用成員變量,成員變量無須被final修飾
注意:
- JDK1.8及以上版本:即使被調用的局部變量沒有被final修飾,也會默認添加final
- JDK1.8以下版本:必須寫明局部變量由final修飾,否則無法調用