Java内部类

内部类三种,1:普通成员内部类(成员内部类);2:方法内部类(局部内部类);3:静态内部类(成员内部类);4:匿名内部类(继承式、接口式、参数式)(局部内部类)

匿名类有以下几个原则:

1:不能有构造方法,只能有一个实例;

2:不能定义任何静态成员、静态方法;

3:不能是 public,protected,private,static;

4:一定是在new的后面。用其隐含实现一个接口或实现一个类;

5:匿名内部类为局部的,所以局部内部类的所有限制都对其生效。

@Test
 void testBaseData(){
        Outer outer = new Outer();
        outer.print3(new Eat() {
            @Override
            public void eat() {
                System.out.println("参数式匿名内部类");
            }
        });
    }
}


class Outer{
    private String name = "name";

    //普通成员内部类
    class Inner{
        public void print(){
            System.out.println("成员内部类,可以访问到外部类的属性" + name);
        }
    }

    public void innerPrint(){
        Inner inner = new Inner();
        inner.print();
    }


    public void show(){
        int x = 10;//实际是被final修饰
        //方法内部类
        class Inner2{
            public void print(){
                System.out.println("方法内部类,可以访问到外部类的属性" + name + "但是不可以修改x");
            }
        }
        Inner2 inner2 = new Inner2();
        inner2.print();
    }

    //静态内部类
    static  class Inner3{
        public void print(){
            System.out.println("静态内部类,无法访问到外部类的属性name,但是可以访问静态属性");
        }
    }

    //匿名内部类
    //继承式
    public void  print1(){
        Cat cat = new Cat() {
            @Override
            public void eat() {
                System.out.println("继承式匿名内部类");
            }
        };
        cat.eat();
    }
    //接口式
    public void print2(){
        Eat eat = new Eat() {
            @Override
            public void eat() {
                System.out.println("接口式匿名内部类");
            }
        };
        eat.eat();
    }

    //参数式
    public void print3(Eat eat){
        eat.eat();
    }
}

abstract class Cat{
    abstract void eat();
}

interface Eat{
    public void eat();
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值