内部类

来源:互联网 发布:域名注册证书下载 编辑:程序博客网 时间:2024/06/06 01:30

内部类:只是编译时的概念,编译后会有OutClass.class和OutClass$InnerClass.class2个文件。

public class OutClass {    private String name;    public String getName() {return name;}    public void setName(String name) {this.name = name;}    public class InnerClass{        private String name;        public String getName() { return name;}        public void setName(String name) { this.name = name; }        public OutClass getOutClass(){            //根据外部类.this返回外部类对象            return OutClass.this;        }        public void find(){            //如果InnerClass里没有name属性,则使用的是OutClass的            System.out.println(name);        }    }    public static void main(String[] args) {        OutClass out=new OutClass();        out.setName("out");        //创建内部类对象 必须用外部类对象new        OutClass.InnerClass inner=out.new InnerClass();        inner.setName("inner");        inner.find();    }}
内部类有4种:成员内部类、局部内部类、匿名内部类和静态内部类。

1.成员内部类:普通内部类,innerClass中不能有static对象和方法,实例化innerClass对象前需指定OutClass对象。

2.局部内部类:定义在属性或方法内部作用域中的内部类,出了作用域就没用了。

3.匿名内部类:

interface InernerClassInterface {    int getNumber();}

private final String x="abc";public InernerClassInterface getInernerClassInterface(final int a,int b){    //匿名内部类,需要有内部类的父类或接口    //没有访问类型,没有类名,所以没有构造方法    //形参是final的,也可以访问外部的final对象    return new InernerClassInterface(){        @Override        public int getNumber() {            return 0;        }        public void find(){            System.out.println(x);            System.out.println(a);        }    };}

4.静态内部类

内部可以存在static对象,不能使用外部类非static的对象,实例化时也不需要外部类对象。


原创粉丝点击