Java超全面梳理内部类的使用

作者:orangemilk_ 时间:2021-09-06 11:24:07 

一、内部类

1.内部类的概念

内部类是定义在类中的类。

内部类把逻辑上相关的类放在一起。而有的内部类不会在其他地方用到,它没有类名,在定义的时候就生成一个该类的实例,称为匿名内部类。匿名内部类是一种特殊的内部类。

当然啦!可以把内部类看作外部类的一个成员,它拥有自己的成员变量和成员方法。通过实例化对象可以访问其成员变量或调用成员方法。

2.内部类的定义

把类的定义放在一个用于封装它的类的内部。

  • 内部类不能与外部类同名。

  • 在封装它的类内部使用内部类与普通类相同,在外部使用要在内部类前加上它所属的外部类的名字。在用new创建内部类时也要在new前加上对象变量。

Java超全面梳理内部类的使用

3.内部类与外部类的访问规则

在外部类中,通过一个内部类对象引用内部类中的成员,同样啦!在内部类中也可以直接引用它的外部类的成员,内部类也可以通过创建对象从外部类之外被调用,但必须在内部声明为public。

原理:

在内部类对象中保存了一个对外部类对象的引用,当在内部类的成员方法中访问某一变量时,如果在该方法和内部类中都没有定义这个变量,调用就会被传递给内部类保存的那个对外部类的引用,通过这个外部类对象的引用去调用这个变量。

//filename:Group.java
public class Group{
   private int age;
   public class Student{
       String name;
       public Student(String n,int a){
           name=n;
           age=a;
       }
       public void show(){
           System.out.print("姓名:"+this.name+"年龄:"+age);
       }
   }
   public void show(){
       Student stu=new Student("张三 ",18);
       stu.show();
   }
   public static void main(String[] args){
       Group g=new Group();
       g.show();
   }
}
//姓名:张三 年龄:18

Java超全面梳理内部类的使用

Java超全面梳理内部类的使用

  • 在内部内调用外部类的方法也是同样的原理。

  • 内部内编译完成后,产生的文件名为:外部类名$内部类名.class。

4.内部类的注意事项

  • 内部类定义为抽象类,需要有其它内部类来继承或者实现。

  • 内部类可以声明为protected,private。

  • 内部类不能与包含它的外部类名相同。

  • 内部类既可以使用外部类的成员变量,也可以使用内部类所在方法的局部变量。

  • 内部类不光可以在类中定义,也可以在程序块之中定义。比如在方法中定义内部类,但是只能访问方法中final类型的局部变量。

  • 内部类可以声明为static,静态内部类自动转换为顶层类,即它没有父类,而且不能引用外部类成员或其他内部类中的成员,非静态内部类不能声明静态成员,只有静态内部类才能声明静态成员。

二、匿名内部类

是指可以利用内部类创建没有名字的内部类,进一步声明内部类和创建一个该类的对象。

  • 创建匿名类的用意是:补充内部类中没有定义到的方法。

  • 匿名内部类直接使用父类的名字或者实现接口的名字。

  • 匿名类的定义和实例化对象同时进行。

  • 匿名内部类没有名字,所以它的前面不能有访问权限修饰符,也没有构造方法。因为默认构造方法没有参数,所以创建对象时不能带参数。

Java超全面梳理内部类的使用

使用方法:

//filename:A_1.java
public class A_1{
   public static void main(String[] args){
       (
               new Inner(){
                   void setName(String n){
                       name=n;
                       System.out.print("姓名:"+name);
                   }
               }
               ).setName("张 三");
   }
   static class Inner{
       String name;
   }
}
//姓名:张 三

思路:

Java超全面梳理内部类的使用

  • 在上面例子中创建一个匿名内部类对象,但却没有名称,所以叫做“匿名内部类”。

  • 匿名内部类编译完成后,所产生的文件名:外部类类名$编号.class。编号为1,2,3…,代表第几个匿名内部类。

来源:https://blog.csdn.net/zhangxia_/article/details/124194772

标签:Java,内部类
0
投稿

猜你喜欢

  • 使用SpringMVC访问Controller接口返回400BadRequest

    2023-06-05 00:14:01
  • 详解IDEA启动多个微服务的配置方法

    2023-11-24 09:22:24
  • Android 微信摇一摇功能实现详细介绍

    2023-06-21 21:00:09
  • 详解Java中自定义注解的使用

    2023-11-27 07:36:30
  • Java Servlet3.0异步处理问题

    2023-08-12 00:52:05
  • Java常用流程控制语句实现原理解析

    2023-11-08 14:11:34
  • android采用FFmpeg实现音频混合与拼接剪切

    2023-10-04 06:51:24
  • java实现List中对象排序的方法

    2023-11-08 21:36:29
  • 关于MVC与SpringMVC的介绍、区别、执行流程

    2023-11-28 02:25:56
  • 详解Spring Cloud负载均衡重要组件Ribbon中重要类的用法

    2023-07-06 02:54:01
  • Kotlin编程基础语法编码规范

    2023-06-20 16:50:07
  • Java+Nginx实现POP、IMAP、SMTP邮箱代理服务

    2023-11-26 10:31:47
  • 学生视角带你了解Java内部类

    2022-09-29 17:51:04
  • java打印指定年月的日历

    2023-11-11 19:21:19
  • C++ Cmake的构建静态库和动态库详解

    2023-06-28 08:28:15
  • c# 在windows中操作IIS设置FTP服务器的示例

    2023-07-18 06:13:01
  • IntellJ IDEA神器使用技巧(小结)

    2023-08-08 22:01:44
  • Java多线程中关于join方法的使用实例解析

    2023-08-22 21:47:29
  • 轻松理解Java面试和开发中的IoC(控制反转)

    2023-08-10 03:00:35
  • java Semaphore共享锁实现原理解析

    2021-11-02 23:12:38
  • asp之家 软件编程 m.aspxhome.com