学生视角带你了解Java内部类

作者:笑霸final 时间:2022-09-29 17:51:04 

一、内部类介绍

1.定义:一个类内部又嵌套了一个类,被嵌套的类就是内部类(inner class),嵌套其他类的称为外部类(outer class)。内部类是类的五大成员之一(属性、 方法、构造器、代码块、内部类)。

分类:

学生视角带你了解Java内部类

二、成员内部类:

1、非静态内部类

说明:定义在成员位置中(方法或代码块外面),无static修饰。

1.可以直接访问外部类的所有的成员

2.可以 添加任意权限修饰符

3.作用域,和其他成员一样作用在整个外部类


package local_class;

public class localclass {//外部类
   //属性位置
   private int n1=10;
   class localN1{//局部类
       public void output(){
           //==1==.可以直接访问外部类的所有的成员,包括私有
           System.out.println("获取私有成员"+n1);
       }
   }
   //写一个方法来创建局部类的一个实列
   public void output(){
       localN1 LocalN1 = new localN1();
       LocalN1.output();
   }

}

实现:

学生视角带你了解Java内部类

2、静态内部类

**说明:**定义在成员位置中(方法或代码块外面),有或无static修饰。

1.可以直接访问外部类的静态的成员,不能访问非静态成员。

学生视角带你了解Java内部类

2.可以 添加任意权限修饰符

3.作用域,和其他成员一样作用在整个外部类

代码:


package local_class;

public class _static_localclass {//外部类
   private int n1=10;
   static int n2=20;
   static public class localN2{//静态局部类
       public void output(){
           //==1==.可以直接访问外部类的所有的成员,包括私有
           System.out.println("获取_static_localclass私有成员"+n2);
           //System.out.println(n1);
       }
   }
   //写一个方法来创建局部类的一个实列
   public void output(){
       localN2 LocalN2 = new localN2();
       LocalN2.output();
   }
}

学生视角带你了解Java内部类

成员内部类:用法比较简单。

二、局部内部类:

说明:局部类是定义在外部类的方法内或者代码块内。

1.可以直接访问外部类的所有的成员。

2.不能添加访问修饰符,局部内部类的地位就是一个局部变量(所以可以用fianl修饰)。

3.作用域:作用在所定义的方法中或者代码块中。

4.访问方式:局部内部类访问外部外部类成员可以直接访问。外部类访问局部内部类,在外部类作用域内先创建对象再访问。

5.外部其他类不能访问内部类。

6.外部类成员与内部类成员重名时,默认就近原则,如果想用外部类的话可以使用:外部类名.this.成员 。

例如:

学生视角带你了解Java内部类

学生视角带你了解Java内部类

2、有名的局部内部类

错误代码

学生视角带你了解Java内部类

正确代码


package _inner_class;

public class Named_local_inner_class {//外部类
   private int a1=1;
   int a2=2;
   private void fun(){
       System.out.println("输出了私有方法");
   }
   //第一种情况,在方法中
   //第二种情况,在代码块中(我就不打代码了和在方法中一样的)
   //此处以方法中为例。
   public void output(){//方法

class inner_class{//局部内部类
           //1.可以访问外部类的所有成员
           public void _output(){
               System.out.println("a1="+a1);//访问的私有成员
               System.out.println("a2="+a2);
               fun();
           }

}
//只需要实例化就行了,然后调用这个 output()方法。
//注意作用域
       inner_class Inner_class=new inner_class();
       Inner_class._output();
   }//结束方法

}//外部类

调用

学生视角带你了解Java内部类

1、匿名局部内部类(重要)

1.本质还是一个内部类 就是一个类,该类没有名字(其实有名字,只是我们看不见,系统分配)。

2.同时还是一个对象。 基本语法

new 类名或接口名(参数列表){
类体
};

学生视角带你了解Java内部类

调用匿名内部类:

学生视角带你了解Java内部类

输出

学生视角带你了解Java内部类

和有名的局部内部类的区分

1.A22对象只使用一次,以后不再使用时用匿名局部内部类。

2.A22的编译类型和运行类型是什么?(运行类型其实就是匿名局部内部类,就是XXXXX.外部类名$1)

如图:

学生视角带你了解Java内部类

学生视角带你了解Java内部类

最佳实践:当作参数直接传递,简介高效。

来源:https://blog.csdn.net/weixin_52062043/article/details/122567464

标签:Java,内部类
0
投稿

猜你喜欢

  • Java单例模式简单示例

    2022-04-24 03:46:20
  • 如何利用IDEA搭建SpringBoot项目整合mybatis实现简单的登录功能

    2022-01-15 06:14:59
  • 详解Spring中bean的几种注入方式

    2023-02-12 20:25:07
  • Java DWR内存泄漏问题解决方案

    2022-02-28 02:35:07
  • JVM类加载,垃圾回收

    2022-08-16 02:44:36
  • 实例讲解Java中random.nextInt()与Math.random()的基础用法

    2023-11-29 12:29:54
  • 解析Flink内核原理与实现核心抽象

    2023-11-25 10:30:04
  • 基于eclipse.ini内存设置的问题详解

    2021-08-25 02:56:55
  • 将JavaDoc注释生成API文档的操作

    2023-06-16 18:24:06
  • 使用Java实现qq邮箱发送邮件

    2023-10-14 18:24:36
  • Opencv EigenFace人脸识别算法详解

    2023-07-21 19:30:17
  • jar包手动添加到本地maven仓库的步骤详解

    2023-11-23 05:09:37
  • Android 动态加载二维码视图生成快照的示例

    2023-08-04 19:57:54
  • opencv 做人脸识别 opencv 人脸匹配分析

    2023-07-09 06:34:44
  • Java中的synchronized关键字

    2023-07-28 18:39:26
  • nacos中的配置使用@Value注解获取不到值的原因及解决方案

    2023-11-29 13:43:00
  • React-Native之Android(6.0及以上)权限申请详解

    2023-07-28 01:56:55
  • springboot如何实现自动装配源码解读

    2023-11-10 15:44:20
  • Java设计模式之命令模式详解

    2023-11-15 21:18:43
  • Java由浅入深带你精通继承super

    2023-11-23 02:34:28
  • asp之家 软件编程 m.aspxhome.com