package com.innerClass; //繼承內部類、接口式匿名內部類、參數式內部類(在方法中要傳一個參數直接new一個接口) /*使用匿名內部類時,要注意一下幾個原則: * 1.不能有構造方法,只能有一個實例(沒有存下對象名字,只能用一次,用完即丟) * 2.不能定義任何靜態成員、靜態方法 * 3.不能是public、protected、private、static * 4.必定是在new後面,用其隱含實現一個接口或實現一個類 * 5.匿名內部類爲局部的,因此局部內部類的全部限制都對其生效 * 6.內部類優先考慮靜態內部類 * */ public class NiMingInner { public static void main(String[] args) { //在外部直接使用靜態內部類 //建立靜態內部類對象不須要依賴外部類的對象,在android常用 Outer3.StaticInnerClass stic=new Outer3.StaticInnerClass(); stic.print(); //接口匿名內部類在外部調用 Outer4 outer4=new Outer4(); outer4.print(); //參數式匿名內部類在外部調用,傳一個Child對象 outer4.print2(new Child() {//注意是大括號 @Override public void desc() { //把實現套在參數裏面了,也就是在參數中直接實現了接口的方法 System.out.println("參數式匿名內部類"); } }); } } //普通類不能設爲靜態,內部類才行 class Outer4{ //靜態內部類 static class StaticInnerClass{ //靜態內部類不能調用外部類的成員變量,只能用本身的final常量 final int x=10; public void print(){ System.out.println("static inner class "); } } //接口式匿名內部類調用 public void print(){ Child c=new Child(){//接口式內部類調用,注意後面是;結束 @Override public void desc() { System.out.println("匿名內部類對象"); }}; c.desc();//在外面 } //參數式匿名內部類調用 public void print2(Child c){ c.desc(); } } //定義一個藉口,匿名接口內部類 interface Child{ public void desc(); }