内部类和匿名内部类

来源:互联网 发布:文章采集软件 编辑:程序博客网 时间:2024/05/19 21:01

内部类

  • 定义在类里面的类

分析事物时,发现该事物的描述还有事物,且这个事物还在访问被描述事物的内容

内部类编译生成的字节码文件名是 外部类名$内部类名

内部类也可以定义在局部,但是只能访问局部中被final修饰的局部变量

class Outer{    private int outerNum = 1;    class Inner    {        int num = outerNum;//内部类可以直接访问外部类成员        void innerMethod()//外部类想要访问内部类成员必须先创建内部类对象        {            System.out.println("Inner class"+num);        }    }    void outerMethod()    {        System.out.println("outer class");    }}class InnerClass {    public static void main(String[] args)     {        //直接访问内部内的成员        Outer.Inner c = new Outer().new Inner();//语法格式,必须要内部类所属        c.innerMethod();        //如果内部内是静态的,则相当于外部类,不用创建外部类对象也可以访问        //OuterInner c = new Outer.Inner();        //如果内部类里面有静态方法,那么内部类必须是静态的        //则可以直接访问        //Outer.Inner.innerMethod();    }}

匿名内部类

必须有继承或是实现一个外部类或者接口
格式:new 父类或者接口名()
{
子类内容
}.调用方法;
1.调用方法可不写,按需求加上
2.;不可以掉,表示一个语句结束
3.new 并不是创建了一个父类或者接口,而是创建了匿名内部类,在{}内具体实现了子类

abstract class Fruit {    abstract  void eat();}class FruitShop{    String fruit = "apple";    //如果没有匿名类,要使用内部类的方法    /*    class Inner extends Fruit    {        void eat()        {            System.out.println(fruit+"水果怎么吃");        }    }    void method()    {        new Inner().eat();    }    */    //如果使用匿名内部类就方便多了    void method()    {        new Fruit(){//            void eat()            {                System.out.println(fruit+"水果怎么吃");            }            //还可以定义其他方法        }.eat();    }}class  AnonyInnerClass{    public static void main(String[] args)     {        new FruitShop().method();    }}
1 0
原创粉丝点击