java 内部类 静态内部类_java外部类和内部类

java 内部类 静态内部类_java外部类和内部类占坑中。。参考:从一道面试题开始说起枚举、动态代理的原理

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

今天我们分析内部类和静态内部类的区别,首先我们写一个InnerClassTest类,其中有一个内部类InnerClass和静态内部类StaticInnerClass

public class InnerClassTest { 
   
    private int aNum = 1;

    public static void main(String[] args) { 
   
        new InnerClassTest().a();
    }

    private void a() { 
   
        new InnerClass().innerMethod();
        new StaticInnerClass().innerMethod();
    }

    void b() { 
   

    }

    private void c() { 
   

    }

    public void d(){ 
   

    }

    private class InnerClass { 
   
        private void innerMethod() { 
   
            c();
            aNum = 2;
        }
    }
    
    static class StaticInnerClass { 
   
        private void innerMethod() { 
   
            d();
        }
    }
}

静态内部类报错

分析

  1. 外部类能够调用内部类的私有方法new InnerClass().innerMethod()new StaticInnerClass().innerMethod().
  2. 倒数5行,StaticInnerClassinnerMethod()报错,显示d()

Q:什么是内部类?有什么作用?静态内部类和非静态内部类的区别?

总结

内部类就是定义在另外一个类里面的类。它隐藏在外部类中,封装性更强,不允许除外部类外的其他类访问它;但它可直接访问外部类的成员。

静态内部类和非静态内部类的区别有:

  1. 静态内部类是指被声明为static的内部类,可不依赖外部类实例化;而非静态内部类需要通过生成外部类来间接生成。
  2. 静态内部类只能访问外部类的静态成员变量和静态方法,而非静态内部类由于持有对外部类的引用,可以访问外部类的所用成员

参考:

从一道面试题开始说起 枚举、动态代理的原理
java内部类有什么好处?为什么需要内部类?

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/184322.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • es6数组和对象常用方法

    es6数组和对象常用方法数组forEach()方法对数组的每个元素执行一次给定的函数。vararr=[1,2,3]arr.forEach((value,index)=>{console.log(‘数组值:’+value);console.log(‘数组索引:’+index);})map()方法创建一个新数组,其结果是该数组中的每个元素都调用一次提供的函数后的返回值。vararr=[1,2,3]vararr1=arr.map((value,in

    2022年5月26日
    46
  • 第十五章——自编码器(Autoencoders)[通俗易懂]

    第十五章——自编码器(Autoencoders)[通俗易懂]本文介绍了一种人工神经网络——自编码器

    2022年8月1日
    9
  • 桌面太单调?一起用Python做个自定义动态壁纸,竟然还可以放视频!「建议收藏」

    桌面太单调?一起用Python做个自定义动态壁纸,竟然还可以放视频!「建议收藏」前言前段时间,用PyQt5写了几篇文章,关于Python自制一款炫酷音乐播放器、自定义桌面动画挂件、车牌自动识别系统。今天就继续给大家分享一个实战案例,带大家一起用Python的PyQt5开发一个自定义动态桌面壁纸,好玩又有趣!首先一起来看看最终实现的自定义动态壁纸效果:…

    2022年5月31日
    31
  • 解决:mysql is blocked because of many connection errors;

    解决:mysql is blocked because of many connection errors;

    2021年9月21日
    147
  • 观察者模式observer不适用于_观察者模式是什么

    观察者模式observer不适用于_观察者模式是什么观察者模式Obeserver动机模式定义实例结构图要点总结笔记动机在软件构建过程中,我们需要为某些对象建立 一种“通知依赖关系” —-一个对象发(目标对象)的状态发生改变,所有依赖的对象(观察者对象)都将很好的得到通知。如果这样的依赖关系过于紧密。将使软件不能很好的抵御变化使用面向对象技术 可以将这种依赖关系弱化,并形成一种稳定的依赖关系。从而实现软件体系结构的松耦合。模式定义定义对象间的一种一对多(变化)的依赖关系,以便当一个对象(subject)的状态发生改变时,所有依赖于它的对象都得到通

    2022年8月11日
    4
  • 层序遍历总结「建议收藏」

    层序遍历总结「建议收藏」以LeetCode102作为例子:题目描述思路描述层序遍历需要用到的数据结构是队列。需要考虑的问题是:如何标识当前节点的层数。有以下三种方法:方法1将每个节点表示为一个二元组(node,level),这种方法效率太低,不考虑。感兴趣可以参考方法2遍历完一层节点后,在队列中插入一个标记节点NULL,这个标记节点没有具体意义,只是标识某一层已经遍历结束。这种方法的缺点在于,假如想要在层序遍历过程中,有元素为NULL,那么标记节点就会出现混淆。这种方法的代码我经常用,如下:c

    2025年6月14日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号