複習8:內部類

內部類

  • 內部類是什麼
  • 內部類的類別
  • 成員內部類
  • 靜態內部類
  • 匿名內部類

內部類是什麼

示例

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修飾,否則無法調用

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