今天我们分析内部类和静态内部类的区别,首先我们写一个InnerClassTest类,其中有一个内部类InnerClass和静态内部类StaticInnerClass。...倒数5行,StaticInnerClass的innerMethod()报错,显示d() Q:什么是内部类?有什么作用?静态内部类和非静态内部类的区别? 总结 内部类就是定义在另外一个类里面的类。...它隐藏在外部类中,封装性更强,不允许除外部类外的其他类访问它;但它可直接访问外部类的成员。...静态内部类和非静态内部类的区别有: 静态内部类是指被声明为static的内部类,可不依赖外部类实例化;而非静态内部类需要通过生成外部类来间接生成。...静态内部类只能访问外部类的静态成员变量和静态方法,而非静态内部类由于持有对外部类的引用,可以访问外部类的所用成员 参考: 从一道面试题开始说起 枚举、动态代理的原理 java内部类有什么好处?
java内部类作用 为什么在Java中需要内部类?总结一下主要有以下四点: 1.每个内部类都能独立的继承一个接口的实现,所以无论外部类是否已经继承了某个(接口的)实现,对于内部类都没有影响。...3.方便编写事件驱动程序 4.方便编写线程代码 个人觉得第一点是最重要的原因之一,内部类的存在使得Java的多继承机制变得更加完善。...◆Java内部类 一、 含义 ---- 在Java编程语言里,程序是由类(class)构建而成的。在一个类的内部也可以声明类,我们把这样的类叫做内部类。 ?...四、 分类 ---- Java内部类可分为成员内部类、局部内部类、匿名内部类、静态内部类。...我们知道加载类时,会先初始化静态成员,如果成员内部类有静态成员,那么内部类就会在外部类之前生成,而内部类是为外部类服务的,内部类在外部类之前就生成可能会脱离掌控。
1.成员内部类 成员内部类是最普通的内部类,它的定义为位于另一个类的内部,形如下面的形式: ? 这样看起来,类Draw像是类Circle的一个成员,Circle称为外部类。...虽然成员内部类可以无条件地访问外部类的成员,而外部类想访问成员内部类的成员却不是这么随心所欲了。...虽然成员内部类可以无条件地访问外部类的成员,而外部类想访问成员内部类的成员却不是这么随心所欲了。...2.局部内部类 局部内部类是定义在一个方法或者一个作用域里面的类,它和成员内部类的区别在于局部内部类的访问仅限于方法内或者该作用域内。 ?...静态内部类是不需要依赖于外部类的,这点和类的静态成员属性有点类似,并且它不能使用外部类的非static成员变量或者方法,这点很好理解,因为在没有外部类的对象的情况下,可以创建静态内部类的对象,如果允许访问外部类的非
如果一个事物的内部包含另一个事物,那么这就是一个类的内部包含另一个类; 比如可以比作:"身体和心脏" "汽车和发动机"; 内部类又可以分为: 1、成员内部类 2、局部内部类(匿名内部类) 成员内部类:...成员内部类的定义格式: 修饰符 class 外部类名称{ 修饰符 class 内部类名称{ } } 注意:内用外可以随意使用,外用内,需要内部类的对象; 如下图: 如何使用成员内部类...,两种方式: 1、间接访问:在外部类的方法中,使用内部类,然后在main只调用外部类的方法; 2、直接访问:外部类名称.内部类名称 对象名=new 外部类名称().new 内部类名称(); Body.Heart...格式: 修饰符 class 外部类名称{ 修饰符 返回值类型 外部类成员方法名(参数列表){ class 局部内部类 (){ } } } 如下图: 可以用的权限修饰符...) / private 3、局部内部类:什么都不能写 匿名内部类: 如果接口的实现类(父类的子类)只需要使用一次, 那么这种情况下就可以省略该类的定义,用匿名内部类; 格式: 接口名称 对象名=new
/* * 内部类 * */ 1 class OutClass{ 2 //定义外部类的成员变量 3 private int x=1; 4 //定义外部类函数 5...public void methodOut(){ 6 System.out.println("外部类"); 7 } 8 //定义内部类 9 class InterClass...{ 10 //定义内部类的变量 11 private int x=2; 12 //定义内部类的函数 13 public void methodInter...void main(String[] args) { 28 //创建外部类对象,并调用外部类方法 29 OutClass out=new OutClass(); 30...(); 33 //调用内部类方法 34 inter.methodInter(); 35 } 36 } 运行结果: 外部类 函数中的x=:3 内部类的x=:2 外部类的
最近在看《Java 编程思想(第四版)》这本书,对博主这种对Java初通皮毛的人来说,能同时兼顾基础和深度,受益颇多,也是对自己已有的Java知识进行了比较系统的梳理。...这篇先讲讲Java内部类相关的东西。都是结合书本内化而来的,有知识点,也有布衣博主自己的料。...没有然后了,就先这样简洁直观的认识它吧,相信我,内部类本来就很简单,别搞得太复杂了。 3 、内部类对象创建和基本使用 内部类既然是个Java类,自然是可以创建对象的。...下面分别介绍—— 普通内部类 普通情况,或者说最典型的情况,就是一个Java类嵌在另一个Java类中,形成了内、外的格局;外部类就是我们普通的类,内部类也是普通的类,特性都满足Java类的特性,...} } 不过,通常情况下,也不会这样去创建内部类对象,基于Java封装的特性,内部类作为一种封装的体现,通常会对调用者隐藏实现细节,而通过外部类的方法来返回内部类的对象实例。
类中还有类就是内部类 一.成员内部类 public class Text { class innerClass{//成员内部类 int id = 88;//定义属性 public...//外部类.new 创建内部类 class1.inf(); } } 成员内部类是最普通的内部类,它的定义为位于另一个类的内部。...该类称为外部类,内部类可以无条件访问外部类。 外部类访问内部类需要创建一个对象。 内部类依附外部类而存在,要创建内部类,先要创建外部类的对象。...二.局部内部类 该类访问仅限于方法内和该作用域内 public class Text2 { int qq = 1397995240; int tel = 151888; public outClass...text.super();//调用外部类的方法 只有这样才能为外部类提供对象引用 } }
在 Java 中,可以将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类。广泛意义上的内部类一般来说包括这四种:成员内部类、局部内部类、匿名内部类和静态内部类。...从定义的位置上看: (1)定义在外部类的方法体内/代码块 局部内部类(有类名) 匿名内部类(没有类名) (2)定义在外部类的成员位置上 静态内部类(有static修饰符) 成员内部类(没有static修饰符...2.局部内部类 局部内部类是定义在一个方法或者一个作用域里面的类,它和成员内部类的区别在于局部内部类的访问仅限于方法内或者该作用域内。...(4)局部内部类访问外部类的成员属性或者方法时,直接访问; (5)外部类访问局部内部类的成员属性或者方法时,通过先创建对象,再访问,且必须要在作用域内。...name:" + inner.name); } } 3.匿名内部类 Java 中可以实现一个类中包含另外一个类,且不需要提供任何的类名直接实例化。
Java内部类 内部类简介# ---- Java 一个类中可以嵌套另外一个类,语法格式如下: class OuterClass { // 外部类 // ......外部类访问内部类需要先创建一个内部类对象 成员内部类是依附外部类而存在 可以访问外部类原理 编译器会在编译时生成外部类和内部类两个字节码文件,还会给内部类的无参构造函数增加一个参数,为外部类的一个应用...侧面说明成员内部类依赖于外部类的优先创建,不然会初始化失败 局部内部类# ---- 定义在一个方法或者一个作用域里面的类,局部内部类的访问仅限于方法内或者该作用域内 class MyClass{...本部分参考JAVA匿名内部类(Anonymous Classes) 静态内部类# ---- 静态内部类是不需要依赖于外部类的,并且它不能使用外部类的非static成员变量或者方法,这个和普通静态方法不能访问非静态方法或变量的原理一样...# ---- 为什么在 Java 中需要内部类?
在Java中,可以将一个类定义在另一个类里面或者一个方法里边,这样的类称为内部类,广泛意义上的内部类一般包括四种:成员内部类,局部内部类,匿名内部类,静态内部类 。...1.成员内部类 (1)该类像是外部类的一个成员,可以无条件的访问外部类的所有成员属性和成员方法(包括private成员和静态成员); (2)成员内部类拥有与外部类同名的成员变量时,会发生隐藏现象,即默认情况下访问的是成员内部类中的成员...如果要访问外部类中的成员,需要以下形式访问:【外部类.this.成员变量 或 外部类.this.成员方法】; (3)在外部类中如果要访问成员内部类的成员,必须先创建一个成员内部类的对象,再通过指向这个对象的引用来访问...; (4)成员内部类是依附外部类而存在的,也就是说,如果要创建成员内部类的对象,前提是必须存在一个外部类的对象; (5)内部类可以拥有private访问权限、protected访问权限、public访问权限及包访问权限...2.局部内部类 (1)局部内部类是定义在一个方法或者一个作用域里面的类,它和成员内部类的区别在于局部内部类的访问仅限于方法内或者该作用域内; (2)局部内部类就像是方法里面的一个局部变量一样,是不能有public
如有不足、不当之处,欢迎拍砖指正~ 静态内部类特性详解 ---- 静态内部类的使用场景 在考虑使用静态内部类时,一般有这样的场景需求:当外部类需要使用内部类,而内部类无需外部类资源,并且内部类可以单独创建...静态内部类的使用限制 对于在外部类的各个方法间定义的内部类,静态与非静态在使用时有不同的限制,主要总结为以下的几个区别: (1)在方法间定义的非静态内部类: ● 外围类和内部类可互相访问自己的私有成员...● 非静态内部类中不能定义静态成员变量与方法。 (2)在方法间定义的静态内部类: ● 只能访问外部类的静态成员变量与方法。 ...● 在创建静态内部类实例时不需要将静态内部类的实例绑定在外部类的实例上。(即内部类可以单独创建实例) /** * 声明静态内部类实例与非静态内部类实例的区别示例。...Inner i = o.new Inner(); 静态内部类的使用样例 关于静态内部类,《Effective Java》一书中还给出了一个这样的使用例子: public class Outer
内部类一般包括这四种:成员内部类、静态内部类、局部内部类和匿名内部类。 每个内部类都能独立地实现一个接口或者抽象类,所以无论其所属的主类是否已经实现一个接口或者抽象类,对于内部类都没有影响。...成员内部类和静态内部类用private/protected/public修饰时,外部访问规则与访问对应外部类的属性/方法的规则一样;局部内部类不能使用访问修饰符修饰;匿名内部类甚至都不用class关键字来定义...//内部类调用对应主类的同名方法 } } } (1)成员内部类对象中不能定义静态变量、静态方法 (2)要创建成员内部类对象,必须要先创建对应外部类的对象 (3)成员内部类引用对应主类的同名属性...、构造代码块、方法中 (2)局部内部类不可以用访问修饰符(private/protected/public)修饰 4、匿名内部类 匿名内部类也是一种局部内部类,不需要用class关键字来声明,匿名内部类通常是一个抽象类或接口的实现.../方法 (2)匿名内部类中不能定义构造函数 (3)匿名内部类中引用的外界变量必须为final
内部类的种类: 成员内部类、静态内部类、局部内部类、匿名内部类 成员内部类 1、成员内部类也叫实例内部类。...应用场合:每一个外部类对象都需要一个内部类的实例,内部类离不开外部类存在(相当于心脏对人体) 2、成员内部类的特征: 作为外部类的一个成员存在,与外部类的属性、方法并列成员内部类持有外部类的引用,成员内部类中不能定义...2、静态内部类使用场合:内部类不需要外部类的实例(注意区分成员内部类),静态内部类存在仅仅为外部类提供服务或者逻辑上属于外部类,且逻辑上可以单独存在。...3、静态内部类的特征: 静态内部类不会持有外部类的引用,静态内部类可以访问外部的静态变量,如果访问外部类的成员变量必须通过外部类的实例访问 4、Java中只有内部类才可以是静态的 使用格式:Outer.Inner...1、匿名内部类也就是没有名字的内部类,这是java为了方便我们编写程序而设计的一个机制,因为有时候有的内部类只需要创建一个它的对象就可以了,以后再不会用到这个类,这时候使用匿名内部类就比较合适。
前言 说到java内部类,想必大家首先会想到比较常用的“匿名内部类”,但实际上,这只是内部类的其中一种使用方式而已。...而希望能将Part.java的数据隐藏在MyClass.java内部,于是这个时候内部类就堂而皇之地出现了 那么,这个不请自来的内部类到底给我们上述的局面造成了怎样的改变呢?...新增了一个java文件 使用内部类,将Part类的定义写入MyClass内部 1. 可以减少多余的可见性,例如可把Part在MyClass内部定义为私有,这样对同一包内其他类也不可见了 2....(); } } 结果输出: 内部数据 如此可见,内部类内声明的数据会覆盖外部类的同名数据。...(基本类型数据拷贝副本,对象等则拷贝引用) OK,现在的情况是: 方法内的局部类对data拷贝了两次:外部方法outterPrint值传递时的拷贝,和LocalInner构造函数的拷贝 方法内除了局部类外的作用域只拷贝了
一.内部类基础 在Java中,可以将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类。广泛意义上的内部类一般来说包括这四种:成员内部类、局部内部类、匿名内部类和静态内部类。...2.局部内部类 局部内部类是定义在一个方法或者一个作用域里面的类,它和成员内部类的区别在于局部内部类的访问仅限于方法内或者该作用域内。..." public class com.cxh.test2.Outter$Inner extends java.lang.Object SourceFile: "Outter.java" InnerClass...三.内部类的使用场景和好处 为什么在Java中需要内部类?...3.方便编写事件驱动程序 4.方便编写线程代码 个人觉得第一点是最重要的原因之一,内部类的存在使得Java的多继承机制变得更加完善。
内部类主要特性: 1.内部类可以对同一个包中的其他类隐藏 2.内部类方法可以访问外部类的作用域中的数据,包括原本的私有数据 3.内部类对象总有一个隐式引用,指向创建它的外部类对象,这个引用在内部类的定义中是不可见的...4.静态内部类中没有这个附加的引用(指针),所有Java的静态内部类就相当于C++中的嵌套类 5.静态内部类不能使用外部类中非static成员变量和方法 6.内部类中声明的所有静态字段必须是final,...7.内部类中不能用static方法,也可以有静态方法,但只能访问外部类中的静态字段和方法 8.内部类可以声明为final,还可以用private和protected关键字进行访问权限修饰 9.内部类可以声明为...abstract,因此可以被其他的内部类继承 10.非static的内部类中的成员不能声明为static的,只有在外部类或static的内部类中才能声明static成员 11.多用内部类来实现c++的多重继承功能...var temp1=new A().new innerC(); temp1.getCAngry(); } } class A//让类A同时继承B和C是非法的,我们需要通过内部类来间接实现
在 Java 中,广泛意义上的内部类一般来说包括这四种:成员内部类、局部内部类、匿名内部类和静态内部类。下面就先来了解一下这四种内部类的用法。...局部内部类 局部内部类是定义在一个方法或者一个作用域里面的类,它和成员内部类的区别在于局部内部类的访问仅限于方法内或者该作用域内。...Java 采用了复制的手段来解决这个问题。...#30 // test/Outter$1 #7 = Class #32 // java/lang/Thread #8 =...为了解决这个问题, Java 编译器就限定必须将变量 b 限制为 final ,不允许对变量 b 进行更改(对于引用类型的变量,是不允许指向新的对象),这样数据不一致性的问题就得以解决了。
静态嵌套类使用很少,最重要的是非静态嵌套类,也即是被称作为内部类(inner)。内部类是JAVA语言的主要附加部分。...内部类中的属性和方法即使是外部类也不能直接访问,相反内部类可以直接访问外部类的属性和方法,即使private利于回调函数的编写, Java的四种内部类 成员内部类 局部内部类 匿名内部类 静态内部类...2、外部类中可以创建私有内部类对象。 3、外部类可通过内部类的对象调用内部类的私有成员变量或方法。 4、当内部类与外部类有同名成员变量和方法时,内部类可通过Outer.this方式来引用外部类成员。...我们知道非静态嵌套类在编译完成之后会隐含地保存着一个引用,该引用是指向创建它的外围内,但是静态嵌套类却没有。没有这个引用就意味着。 1....以上就是所有的java内部类的各种模式的简单例子 大家要注意一点,java中只能在内部类中创建静态成员的类,也就是静态嵌套类,也有很多人疑惑为什么 java 静态嵌套部类中可以有非静态成员,还有为什么可以
在Java中,允许一个类的定义位于另一个类的内部,前者称为内部类,后者称为外部类。...,而外部类要访问内部类中的成员需要:内部类.成员或者内部类对象.成员。...分类:成员内部类(static成员内部类和非static成员内部类)、局部内部类(不带修饰符)、匿名内部类 Test.java package fac; public class Test {...; 可以声明为abstract类,因此可以被其它内部类所继承; 内部类的作用是什么?...主要是解决Java不能多重继承。
领取专属 10元无门槛券
手把手带您无忧上云