四种内部类

四种内部类

实例内部类:直接定义在类当中的一个类,在类前面没有任何修饰符
静态内部类:在内部类前面加static
局部内部类:定义在方法内的类
匿名内部类:属于局部内部类的一种特殊情况

 

实例内部类:

属于对象的内部类,不属于类的,你使用static修饰的内部类
想要使用内部类,必须得先创建外部类
创建内部类对象当中,会有一个外部类的引用
在内部类当中可以访问外部类当中的成员
在内部类当中,不能有静态成员
外部类不能直接访问内部类当中的成员

package com.xiongda.inner;

class Outer {
    String name = "xiongda";

    class Inner {
        void print() {
            System.out.println(name);
        }
    }
}

/**
 * 
 * @author xiongda
 * @date 2018年8月5日
 * @description 创建实例内部类
 */
public class InnerClassDemo1 {
    public static void main(String[] args) {
        Outer outer = new Outer();
        Outer.Inner inner = outer.new Inner();
        inner.print();
    }
}

静态内部类:

在内部类前面加上static
静态内部类是不需要创建外部对象
在静态内部类当中,是没有外部类引用的
静态内部类,是可以访问外部类的静态成员

package com.xiongda.inner;

class Outer2 {
    static class Inner {
        static String name = "xiongda";
        String signature = "handsome boy";
    }
}

/**
 * 
 * @author xiongda
 * @date 2018年8月5日
 * @description 创建静态内部类 访问静态内部类当中的静态成员 访问静态内部类当中的非静态成员
 */
public class InnerClassDemo2 {
    public static void main(String[] args) {
        // 创建静态内部类
        Outer2.Inner inner = new Outer2.Inner();
        // 访问静态内部类的静态成员
        System.out.println(Outer2.Inner.name);
        // 访问静态内部类当中的非静态成员
        System.out.println(inner.signature);
    }
}

局部内部类:

定义在方法中的内部类
1.不能使用修饰符如 public private
2.局部内部类只能在定义的方法中使用
3.局部内部类当中不能包含静态变量
4.局部内部类当中可以包含局部变量,使用的局部变量的本质是final 常量

package com.xiongda.inner;

class Outer3 {
    void test() {
        // 这前面的修饰符默认是final类型,是存放在方法区当中
        String name = "xiongda";
        class Inner {
            void print() {
                System.out.println(name);
            }
        }

        Inner inner = new Inner();
        inner.print();
    }
}

/**
 * 
 * @author xiongda
 * @date 2018年8月5日
 * @description 创建局部内部类
 */
public class InnerClassDemo3 {
    public static void main(String[] args) {
        Outer3 outer = new Outer3();
        outer.test();
    }
}

匿名内部类 :

就是一个没有名字的局部内部类
匿名内部类没有构造器 一个文件对应一个类
当只使用一次的时候,才使用匿名内部类
创建匿名内部类需要借助父类的构造器或者接口
所以匿名内部类必须得有父类或者实现了接口
内部写的代码在new的时候就会自动执行

package com.xiongda.inner;

interface OuterDevice {
    void work();

}

class Device {
    void connectTo(OuterDevice outerDevice) {
        outerDevice.work();
    }
}

/**
 * 
 * @author xiongda
 * @date 2018年8月5日
 * @description 创建匿名内部类
 */
public class InnerClassDemo4 {
    public static void main(String[] args) {
        Device device = new Device();
        device.connectTo(new OuterDevice() {

            @Override
            public void work() {
                System.out.println("键盘开始工作!");

            }
        });
        device.connectTo(new OuterDevice() {

            @Override
            public void work() {
                System.out.println("鼠标开始工作!");
            }
        });
    }
}

 

转载于:https://www.cnblogs.com/xtuxiongda/p/9425978.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。【项目资源
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值