JAVA内部类

内部类
嵌套定义在类中,方法中,局部代码块中的类
◎非静态内部类

class A{
    class Inner{}
}

非静态内部类,不能独立创建对象
它必须依赖于外部实例才能存在
非静态内部类,用来封装辅助外部实例运算的算法、逻辑

A.Inner i2=new A().new Inner();

===============================================
◎静态内部类

class B{
    static class Inner{}
}
B.Inner i1=new B.Inner();//导包

考虑与外部类关系紧密,可以嵌套定义在一起
在结构设计上,可以选择嵌套,也可以选择分开定义

◎局部内部类

public interface Weapon {
    /**
     * 省略了public abstract
     */
    void kill();
}

class C {
    public static void main(String[] args) {
        Weapon w=new C().f();
        w.kill();
    }
    Weapon f(){
        class Inner implements Weapon{

            @Override
            public void kill() {
                System.out.println("kill");
            }
            
        }
        Inner i=new Inner();
        return i;
        
    }
}

运行结果

kill

在局部定义,类型只能在局部使用
可以转型成父类型,向外传递
===============================================
◎匿名内部类

public interface Weapon {
    /**
     * 省略了public abstract
     */
    void kill();
}
class  D {
Weapon f2(final String name) {
        //局部内部类中,使用外面的局部变量
        //局部变量必须是final的
        Weapon w = new Weapon() {
             //String name; //编译器自动添加
            @Override
            public void kill() {
                System.out.println("使用" + name + "进攻");
            }
        };//继承Weapon接口
        return w;
    }
}

Weapon w=new Weapon(){};
大括号:匿名类
new :新建匿名类的对象
Weapon:父类型
小括号:super()、super(…)

你可能感兴趣的:(JAVA内部类)