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(); }