静态内部类,匿名内部类

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();
}
相关文章
相关标签/搜索