Java 内部类

将一个类(innerClass)定义在另一个类(outClass)中,那么(innerClass)就是内部类。

java内部类分为:成员内部类,局部内部类,匿名内部类,静态内部类。

1.成员内部类

public class outClass {

    private int outData;

    private int getOutData() {
        return outData;
    }

    public void setOutData(int outData) {
        this.outData = outData;
    }

    /**
     * public类型的成员内部类
     */
    public class  innerClass{
        /**
         * 1.不能存在static修饰的变量和方法
         */
//        static int data;
//        private static int fun(){
//
//        }

        private int innerData=0;

        public innerClass(){
            //2.可以无限制使用外部类的变量,private和public类型都可以访问。
            outData=0;
            getOutData();
        }
    }

    /**
     * private类型的成员内部类
     * 只能在外部内中使用innerClass2,外部类以外不能使用
     * 可以通过继承
     */
    private class  innerClass2 implements Father{

    }

    /**
     * 生成 innerClass2对象
     * @return
     */
    public Father getinnerClass2(){
        return new innerClass2();
    }

    /**
     * 3.内部类的对象生成,只能由外部类的对象来生成
     */
    private void test(){
        outClass outClass=new outClass();
        outClass.innerClass innerClass=outClass.new innerClass();
    }
}

 

2.局部内部类

 

public class outClass {
    /**
     * 局部内部类,PDestionation类只能作用于{}语句块中
     *
     * @param str
     * @return
     */
    public Father destionation(String str){
        class Teacher extends Father {
            private String label;
            private Teacher(String whereTo){
                label = whereTo;
            }
            public String readLabel(){
                return label;
            }
        }
        return new Teacher(str);
    }
}

3.匿名内部类-没有类名的类

public class outClass {

   String firstName="";

    /**
     * 匿名内部类:相当于生成继承于Father的子类
     * 没有名字就没有构造方法
     * 匿名内部类访问局部变量,局部变量必须是final型的
     * @param lastName
     * @return
     */
    public Father getFather(final String lastName){

        return new Father(){

            public String name=lastName+firstName;

            @Override
            public void setName(String name) {
                this.name = name;
            }

            @Override
            public String getName() {
                return name;
            }
        };
    }
}

4.静态内部类:使用static修饰的内部类称为静态内部类

public class outClass {
    int outdata;
    static int data2;

    /**
     * 静态内部类
     * 1.不能使用外部类的非static的变量和方法,只能使用外部类static的变量和方法
     * 2.不指向外部类的引用
     * 3.可以定义static和非static的变量和方法
     */
    public static class innerClass{
        public int indata;
        public static int indata2;
        public innerClass(){
            indata=0;
        }
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值