内部类 静态内部类 局部内部类 匿名内部类

内部类

  1. 成员内部类
  2. 静态内部类
  3. 局部内部类
  4. 匿名内部类

我们新建一个Innerclass包

定义一个Outer类(外部)

在里面写一个属性和方法

  private int id;
  public void out(){
      System.out.println("这是外部类的方法")
  }

然后我们在Outer类里面在写一个Inner类

public void Ourter{
private int id;
  public void out(){
      System.out.println("这是外部类的方法")
  }
 class inner{
     public void in(){
         System.out.println("这是内部类方法")
     }
 }   
    
    
}

然后我们在新建一个Application类

new一下外部类

Outer outer = new Outer();

而内部类是需要通过外部类来实例化

Outer.Inner inner = outer.new Inner();

在这里插入图片描述

内部类可以获取外部类的属性和方法

在这里插入图片描述

黑色为外部类 蓝色为内部类

然后再Application类里面输入inner.getID()就可以调用了

静态内部类

在这里插入图片描述

我们在内部类的前面加上static 就会发现id报错了

是因为在Outer外部类的后面,先实例化了Inner类在实例化Outer,那个时候int id 这个属性还没有所以会爆错

除非把上面的Outer类也给加上一个static

静态内部类无法访问非静态外部类

在这里插入图片描述

我们在写一个class A{}

就会发现旁边InnerClass包下的Outer类的A和Outer展开了

这个跟内部类不一样

这个只能算是Outer类下面多了一个A类

这个类不可以是public开头, 因为一个java文件里面只能有一个public class

在这里插入图片描述

但是可以有多个class类,但是只能有一个public class

局部内部类

在这里插入图片描述

我们在Outer类里面写一个mrthod方法

在该方法里面写一个class Inner 也是一个内部类

叫做局部内部类

匿名内部类

在这里插入图片描述

我们在写一个Test类

在这个类下发在写一个Apple类

里面输出一个 1

然后在Text类的main方法里面

new一个Apple

Apple apple = new Apple();
//Apple 引用   apple  名称     new    Apple()实际类型

其中apple是名称

我们可以没有名字却可以初始化类

我们直接new一个Apple 在引用eat方法

在这里插入图片描述

这样他就没有名字,

不要将实例保存在变量中

接口也是没有名字

我们在下发输入一个、

interface UserService{
    void hello();
}

然在Test的main方法中

new UserService{
   @Override
   public void hello(){
       
   } 
}

重写一下hello

然后就会自动变成

 UserService userService = new UserService() {
            @Override
            public void hello() {

            }
 }

这方法也是没有名字的

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值