内部类

简介: 内部类是定义在类中的类,分为成员、静态、局部和匿名四种。成员内部类属于外部类成员,可被权限修饰符修饰;静态内部类仅访问外部静态成员;局部内部类定义在方法内;匿名内部类用于简化接口或父类的实现,常用于一次性场景,提升代码简洁性。(238字)

内部类

写在一个类里面的类叫做内部类

内部类的分类

成员内部类/静态内部类/局部内部类/匿名内部类

成员内部类

写在成员位置的,属于外部类的成员。

成员内部类可以被一些修饰符所修饰,比如:private,默认,protected,public,static等。

在成员内部类中,JDK16之前不能定义静态变量,JDK16开始才可以定义静态变量。

public class Outer {
   
    String name;
    Private class Inner{
   

    }
    //因为Inner用private修饰,故需要提供给其他类创建对象的方法,用getInstance获取Inner对象给使用者
    public Inner getInstance(){
   
        return new Inner();
    }
}
public class test{
   
    public static void main(String Args[]){
   
        Outer o = new Outer();
        /*由于private修饰,所以不能使用Inner.oi去获取getInstance返回的对象,可以使用其父类object(超类)来接收*/
        object oi = o.getInstance();//$符号供内部类使用
        System.out.println(oi);//Outer$Inner@4eec7777
        //outer.Inner oi = new OUter().new Inner();
        //System.out.println(Outer.this.变量名);
    }
}

/内部类的堆内存中会自动生成一个“父类名.this”去记录外部类的地址/

静态内部类

静态内部类是一种特殊的成员内部类。

静态内部类只能访问外部类中的静态变量和静态方法,如果想访问非静态的需要创建外部类的对象。

创建静态内部类对象的格式:外部类名 对象名=new 外部类名.内部类名()

//new出来的对象是Inner的对象
Outer.Inner oi = new Outer.Inner();

调用非静态方法的格式:先创建对象,用对象调用

调用静态方法的格式:外部类名.内部类.方法名();

局部内部类

将内部类定义在方法里面就叫做局部内部类,类似与方法里面的局部变量。局部内部类和局部变量一样,都不能使用public,static,protected等修饰符修饰

外界是无法直接使用,需要在方法内创建局部内部类的对象并使用。

该类可以直接访问外部类的成员,也可以访问方法内的局部变量。

pubolic class Outer{
   
    public void show(){
   
        int a = 10; 
    }
    //局部内部类
    class Inner{
   
        String name;
        int age;
        public void method1(){
   
            System.out.println("局部内部类中的method1方法");
        }       
        public static void method2(){
   
            System.out.println("局部内部类中的method2静态方法");
        }
    }
    //创建局部内部类的对象
    Inner i = new Inner();
    System.out.println(i.name);
    System.out.println(i.age);
    i.method1();
    Inner.method2();
}
匿名内部类(常用且重要)

匿名内部类本质上就是隐藏了名字的内部类(继承/实现、方法重写、创建对象)

example:
    //new 类名或者接口名
    new Inner() {
   
        //需要重写方法
        public void show() {
   
        }
    };//注意大括号末尾有一个分号

匿名内部类可以写在成员位置,也可以写在局部位置

匿名内部类格式的细节:1,包含了继承或实现,方法重写,创建对象。2,整体就是一个类的子类对象或者接口的实现类对象。

使用场景:当方法的参数是接口或者类时,以接口为例,可以传递这个接口的实现类对象,如果实现类只要使用一次,就可以用匿名内部类简化代码。

很牛逼QAQ

// Today is not easy, tomorrow is more difficult, but the day after tomorrow will be wonderful.

相关文章
|
6月前
经典题:求一个数是否为质数
介绍质数判断与自幂数概念:质数为仅被1和自身整除的大于1的自然数;自幂数是n位数等于各位数字n次幂之和,如水仙花数(三位)、四叶玫瑰数(四位)等,体现数字的独特数学之美。(239字)
213 1
|
6月前
|
域名解析 网络协议 Linux
Linux网络基础完全指南(小白也能看懂的网络入门教程)
本教程系统讲解Linux网络基础,涵盖IP地址、子网掩码、网关、DNS等核心概念,介绍ifconfig、ip、ping等常用命令及网络配置文件的使用方法,助力掌握Linux网络配置技能。
626 117
|
7月前
|
人工智能 算法 图形学
C++基本介绍
C++是一种静态类型、编译式通用编程语言,支持过程化、面向对象和泛型编程。作为C的超集,它兼具高效性能与硬件控制能力,广泛应用于游戏开发、嵌入式系统、金融交易、图形处理及科学计算等领域,具有封装、继承、多态和抽象等特性,提升代码复用性与可维护性。(238字)
273 0
|
Android开发
flutter中实现仿Android端的onResume和onPause方法
flutter中实现仿Android端的onResume和onPause方法
|
存储 Dart 数据库
Flutter笔记:状态提升、控制器模式、GetX控制器和服务
Flutter笔记:状态提升、控制器模式、GetX控制器和服务
1115 0
|
Android开发
解决 Android Studio 日志乱码
解决 Android Studio 日志乱码
2912 0
解决 Android Studio 日志乱码
|
4月前
|
存储 缓存 算法
Java Compressed Oops 指针压缩:JVM 内存节省与性能优化的底层秘密
Java Compressed Oops是JVM在64位系统下的关键内存优化技术:利用对象8字节对齐特性,将64位指针压缩为32位存储+左移寻址,堆≤32GB时可省30%内存、提升缓存命中率,零性能开销。超32GB自动失效,调优需规避临界点。(239字)
449 4
|
6月前
|
Java Go 开发者
IDEA开发常用的快捷键
IntelliJ IDEA常用快捷键汇总:涵盖代码生成(如main、sout)、编辑(复制、删除、重命名)、导航(跳转、查找)、格式化、代码阅读及版本控制等高频操作,提升开发效率。熟练掌握可显著优化编码体验,是Java开发者必备技能。
631 1
|
6月前
|
Oracle Java 关系型数据库
Java命名规范
Java命名规范涵盖包、类、方法、变量等命名规则。包名全小写,类名首字母大写采用驼峰法,接口常用形容词,抽象类以Abstract/Base开头,异常类以Exception结尾,方法名小写驼峰,常量全大写用下划线分隔,枚举值按常量规范命名,提升代码可读性与一致性。
899 0
|
7月前
|
Arthas 运维 监控

热门文章

最新文章