内部类

来源:互联网 发布:机箱设计软件 编辑:程序博客网 时间:2024/06/05 19:32

内部类

  • 成员内部类

    • 在类中定义类,在成员内部类中可以访问外部类的所有成员,存在内存泄漏的问题。

      //外部类class Animal {    private String name="小花";    //定义成员方法,方法中访问内部类    public void animalName(){        Cat cat=new Cat();        cat.show();    }    //定义成员内部类    class Cat{        void show(){        //内部类访问外部类的成员变量        System.out.println("name="+name);        }    }} 
    • //测试类public class TestAnimal {    public static void main(String[] args) {        Animal animal=new Animal();//创建外部类对象        animal.animalName();//调用animalName方法    }}
  • 静态内部类

    • 用static修饰成员内部类,不需要有外部类对象,不能访问外部的非静态成员,在非静态的内部类不允许定义静态成员。

      class Animal {    //属性使用静态修饰    private static String name="小花";    //定义静态内部类    static class animalName{        void show(){            System.out.println("name="+name);        }    }}   //测试类public class TestAnimal {    public static void main(String[] args) {    //创建内部类对象       Animal.animalName animal=new Animal.animalName();    //调用内部类的方法    animal.show();    }}
  • 方法内部类

    • 只能在成员方法中定义,只能在当前方法中被使用

      class Animal {    private String name="小花";    public void animalName(){        class AnimalShow{            void show(){            //访问外部类的成员变量            System.out.println("name="+name);            }        }        //调用内部类方法        AnimalShow an=new AnimalShow();        an.show();    }}     //测试类    public class TestAnimal {        public static void main(String[] args) {            //创建外部类对象调用animalName方法            Animal animal=new Animal();            animal.animalName();        }    }
  • 匿名内部类

    • 只能访问父类已有的方法

      abstract class Cat {        public abstract void eat();    }   
    • class Animal {    static Cat cat=new Cat(){    @Override        public void eat() {            System.out.println("小猫在吃鱼");        };    };    public static void main(String[] args) {        cat.eat();    }} 
原创粉丝点击