java中4种内部类

java4中种内部类

什么是内部类?

在类的内部定义另一个完整的类

成员内部类

类中定义另一个类

public class Outer {								//定义一个外部类
    private int age=20;
    private String name="张三";
    public void test(){
        System.out.println("这是外部类");			//内部类有何作用?他可以访问外部类的私有属性
    }

        public class Inter{							//定义一个内部类
            private int age=40;
            private String name="王五";

            public void testOuter(){				
                System.out.println(Outer.this.name);//如果重名会优先访问内部类
                                                    //通过外部类名称.this.属性名来访问外部类属性
                System.out.println(name);
                System.out.println(Outer.this.age);
                System.out.println(age);

            }

    }
}
class test{
    public static void main(String[] args) {
        //实例化内部类的第一种方法
        Outer outer = new Outer();//先定义外部类
        Outer.Inter inter = outer.new Inter();//在定义内部类
        inter.testOuter();


    }
}

在这里插入图片描述

静态内部类

类中定义一个静态类

public class StaticOuter {                      //新建一个外部类
    private int age=20;
    private String name="sss";

    public static class StaticInter{            //新建一个静态内部类,只能在内部创建静态内部类,外部不能创建静态类
        private int age =40;
        private  String name="ddd";
        private static String address="shanghai";
        public void test(){
            StaticOuter staticOuter = new StaticOuter();
            System.out.println(staticOuter.age);//在静态内部类调用外部类属性,需要实例化外部类
            System.out.println(staticOuter.name);
            System.out.println(age);            //直接调用静态内部类
            System.out.println(name);
            System.out.println(address);        //直接调用内部类的静态成员
        }
    }

}
class test1{
    public static void main(String[] args) {
        StaticOuter.StaticInter inter=new StaticOuter.StaticInter();//通过外部类.内部类 对象名称=new外部类.内部类();
                                                                    //新建内部类对象
        inter.test();
    }
}

在这里插入图片描述

局部内部类

在类中的方法中在定义一个类

public class PartOuter {                                //新建一个外部类
    private int age=30;
    private String name="dzw";
    public void show(){                                 //定义一个方法,局部内部类就是定义在方法里面
        final int age1=60;                              //定义一个局部属性,必须是常量,jdk1.8以后可省略final,系统默认有
        class PartInter{                                //定义一个局部内部类,不能用任何修饰符修饰
            private int age=90;
            private String name="www";
            public void show1(){
                System.out.println(PartOuter.this.age); //可直接调用外部类的属性
                System.out.println(PartOuter.this.name);
                System.out.println(name);
                System.out.println(age1);
                System.out.println(age);
            }
        }
        PartInter partInter = new PartInter();          //通过在类外面,新建内部类实例化对象,来调用内部类的方法
        partInter.show1();
    }
}
class test2{
    public static void main(String[] args) {
        PartOuter partOuter = new PartOuter();          //创建外部类实例化
        partOuter.show();                               //调用show方法,不能调用方法里面类的方法
    }
}

在这里插入图片描述

匿名内部类

没有类名的局部内部类

必须继承父类或者实现一个接口

public interface Usb {
    //定义一个方法,鼠标
    void mouse();
}
public class AnonymousOuter  {

}
class test3{
    public static void main(String[] args) {

        Usb usb1 = new Usb(){    //通过接口来实现匿名内部类,省去了局部内部类的步骤,在main方法中,所以是局部匿名内部类
            @Override
           public void mouse() {
              System.out.println("风扇启动");
            }
        };
        usb1.mouse();

    }
}

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值