java内部类作用 为什么在Java中需要内部类?总结一下主要有以下四点: 1.每个内部类都能独立的继承一个接口的实现,所以无论外部类是否已经继承了某个(接口的)实现,对于内部类都没有影响。...3.方便编写事件驱动程序 4.方便编写线程代码 个人觉得第一点是最重要的原因之一,内部类的存在使得Java的多继承机制变得更加完善。...◆Java内部类 一、 含义 ---- 在Java编程语言里,程序是由类(class)构建而成的。在一个类的内部也可以声明类,我们把这样的类叫做内部类。 ?...二、 作用 ---- 实现了更好的封装,我们知道,普通类(非内部类)的访问修饰符不能为private或protected,而内部类可以。...四、 分类 ---- Java内部类可分为成员内部类、局部内部类、匿名内部类、静态内部类。
1.局部类的隐藏作用 局部内部类:是指在方法函数中去定义一个内部类。 局部内部类有一个优势:即对外部世界完全可以隐藏起来,在这个方法类中的其它方法或者代码都不能调用这个内部类。...更不用说其它的类了 也就是局部内部类的作用域只在申明它的块中有效。 除了该方法,没有任何其他的方式知道这个类的存在。...注意:一般局部内部类只有在当整个应用程序代码中使用了一次的时候,就可以放在局部中。 当然也可以根据它的这个隐藏的作用去设置自己的代码。因为局部内部类只有定义它的方法知道,其他的人都无权干涉。...,它可以取消隐式引用的作用,如果想这个隐式引用有效,必须改变外部类的数据或者方法为static才可以。...3.隐藏的作用体现在:内部类可以对同一个包中的其他类隐藏起来 这个很好解释,我们只可以用谁定义了这个内部类的外部类去使用这个内部类 直接看代码,标注的红色的部分: ?
一、 作用 内部类可以很好的实现隐藏,一般的非内部类,是不允许有 private 与protected权限的,但内部类可以加上这几个修饰词。...内部类拥有外围类的所有元素的访问权限,可以直接访问外部类的私有属性及方法 可以间接实现多重继承,多个内部类继承不同的类形成了一个类中复用了多个类的方法。...正是由于他的存在使得Java的继承机制更加完善。大家都知道Java只能继承一个类,它的多重继承在我们没有学习内部类之前是用接口来实现的。但使用接口有时候有很多不方便的地方。...而有了内部类就不一样了。它可以使我们的类继承多个具体类或抽象类。大家看下面的例子。...这就需要我们的内部类了。
今天我们分析内部类和静态内部类的区别,首先我们写一个InnerClassTest类,其中有一个内部类InnerClass和静态内部类StaticInnerClass。...倒数5行,StaticInnerClass的innerMethod()报错,显示d() Q:什么是内部类?有什么作用?静态内部类和非静态内部类的区别? 总结 内部类就是定义在另外一个类里面的类。...它隐藏在外部类中,封装性更强,不允许除外部类外的其他类访问它;但它可直接访问外部类的成员。...静态内部类和非静态内部类的区别有: 静态内部类是指被声明为static的内部类,可不依赖外部类实例化;而非静态内部类需要通过生成外部类来间接生成。...静态内部类只能访问外部类的静态成员变量和静态方法,而非静态内部类由于持有对外部类的引用,可以访问外部类的所用成员 参考: 从一道面试题开始说起 枚举、动态代理的原理 java内部类有什么好处?
/* * 内部类 * */ 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 外部类的
而如果此时这个作为返回值的内部类不需要引用外围类对象的话,就可以加上STATIC 静态内部类 取消产生内部类的作用 因为内部类对象总有一个隐式引用,它指向了创建它的外部对象 ?...当你使用了静态Static来修饰这个内部类的时候,这个引用将被取消。...也就是有这样一个特性: 静态内部类的对象除了没有对生成它的外围类对象的引用特权外,与其他所有内部类完全一样 接下来我们看看java技术核心提供的代码: 内部类: package org.innerclass.operate...,因为外部类对象是在静态方法中构造这个内部类的对象的。...如果没有static,表示这个内部类是静态内部类,那么编译器将会给出错误报告: 没有可用的隐式ArrayAlg类型对象初始化内部类对象
1.成员内部类 成员内部类是最普通的内部类,它的定义为位于另一个类的内部,形如下面的形式: ? 这样看起来,类Draw像是类Circle的一个成员,Circle称为外部类。...虽然成员内部类可以无条件地访问外部类的成员,而外部类想访问成员内部类的成员却不是这么随心所欲了。...虽然成员内部类可以无条件地访问外部类的成员,而外部类想访问成员内部类的成员却不是这么随心所欲了。...2.局部内部类 局部内部类是定义在一个方法或者一个作用域里面的类,它和成员内部类的区别在于局部内部类的访问仅限于方法内或者该作用域内。 ?...静态内部类是不需要依赖于外部类的,这点和类的静态成员属性有点类似,并且它不能使用外部类的非static成员变量或者方法,这点很好理解,因为在没有外部类的对象的情况下,可以创建静态内部类的对象,如果允许访问外部类的非
如果一个事物的内部包含另一个事物,那么这就是一个类的内部包含另一个类; 比如可以比作:"身体和心脏" "汽车和发动机"; 内部类又可以分为: 1、成员内部类 2、局部内部类(匿名内部类) 成员内部类:...成员内部类的定义格式: 修饰符 class 外部类名称{ 修饰符 class 内部类名称{ } } 注意:内用外可以随意使用,外用内,需要内部类的对象; 如下图: 如何使用成员内部类...,两种方式: 1、间接访问:在外部类的方法中,使用内部类,然后在main只调用外部类的方法; 2、直接访问:外部类名称.内部类名称 对象名=new 外部类名称().new 内部类名称(); Body.Heart...格式: 修饰符 class 外部类名称{ 修饰符 返回值类型 外部类成员方法名(参数列表){ class 局部内部类 (){ } } } 如下图: 可以用的权限修饰符...) / private 3、局部内部类:什么都不能写 匿名内部类: 如果接口的实现类(父类的子类)只需要使用一次, 那么这种情况下就可以省略该类的定义,用匿名内部类; 格式: 接口名称 对象名=new
在 Java 中,可以将一个类定义在另一个类里面或者一个方法里面,这样的类称为内部类。广泛意义上的内部类一般来说包括这四种:成员内部类、局部内部类、匿名内部类和静态内部类。...2.局部内部类 局部内部类是定义在一个方法或者一个作用域里面的类,它和成员内部类的区别在于局部内部类的访问仅限于方法内或者该作用域内。...(3)作用域仅仅在定义它的方法或者代码块中。 (4)局部内部类访问外部类的成员属性或者方法时,直接访问; (5)外部类访问局部内部类的成员属性或者方法时,通过先创建对象,再访问,且必须要在作用域内。...name:" + inner.name); } } 3.匿名内部类 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 编程思想(第四版)》这本书,对博主这种对Java初通皮毛的人来说,能同时兼顾基础和深度,受益颇多,也是对自己已有的Java知识进行了比较系统的梳理。...这篇先讲讲Java内部类相关的东西。都是结合书本内化而来的,有知识点,也有布衣博主自己的料。...没有然后了,就先这样简洁直观的认识它吧,相信我,内部类本来就很简单,别搞得太复杂了。 3 、内部类对象创建和基本使用 内部类既然是个Java类,自然是可以创建对象的。...下面分别介绍—— 普通内部类 普通情况,或者说最典型的情况,就是一个Java类嵌在另一个Java类中,形成了内、外的格局;外部类就是我们普通的类,内部类也是普通的类,特性都满足Java类的特性,...} } 不过,通常情况下,也不会这样去创建内部类对象,基于Java封装的特性,内部类作为一种封装的体现,通常会对调用者隐藏实现细节,而通过外部类的方法来返回内部类的对象实例。
首先我们需要了解什么叫匿名内部类:定义(JAVA核心技术上是这样说的) 匿名内部类(anonymous inner calss):将局部内部类的使用再深入一步。...这种类被称为匿名内部类。 话很少,说的也很浅显,可能读完了还不知道什么叫匿名内部类?...现在匿名内部类没有名字,肯定用不了构造器的。也就是说匿名内部类一定没有构造器的。 这里就告诉我们,是不是所有的类都有构造器呢,不一定,匿名内部类不能有构造器!...; System.out.println("我是唐老鸭,你是不是在1秒内想到 我呢?")...我是唐老鸭,你是不是在1秒内想到 我呢? 就这样匿名内部类就是这些了,希望对你有帮助! 转载请注明!
内部类的种类: 成员内部类、静态内部类、局部内部类、匿名内部类 成员内部类 1、成员内部类也叫实例内部类。...应用场合:每一个外部类对象都需要一个内部类的实例,内部类离不开外部类存在(相当于心脏对人体) 2、成员内部类的特征: 作为外部类的一个成员存在,与外部类的属性、方法并列成员内部类持有外部类的引用,成员内部类中不能定义...3、静态内部类的特征: 静态内部类不会持有外部类的引用,静态内部类可以访问外部的静态变量,如果访问外部类的成员变量必须通过外部类的实例访问 4、Java中只有内部类才可以是静态的 使用格式:Outer.Inner...2、使用场合:如果内部类对象仅仅为外部类的某个方法使用,使用局部内部类 3、特征: ○用在方法内部,作用范围仅限于该方法中 ○根据情况决定持有外部类对象引用 ○不能使用private,protected...1、匿名内部类也就是没有名字的内部类,这是java为了方便我们编写程序而设计的一个机制,因为有时候有的内部类只需要创建一个它的对象就可以了,以后再不会用到这个类,这时候使用匿名内部类就比较合适。
在Java中,可以将一个类定义在另一个类或者一个方法的内部,前者称为内部类,后者称为外部类。内部类也是封装的一种体现。...public class A{ //... } class B{ //... } //A和B是两个独立的类,彼此之间没有关系 内部类和外部类公用一个Java源文件,但是经过编译后,内部类会形成单独的字节码文件...修饰的成员内部类 和静态内部类-->被static修饰的成员内部类) 局部内部类(不谈修饰符)、匿名内部类。...2.1成员内部类 在外部类中,内部类定义位置与外部类成员所处位置相同,因此称为成员内部类。 2.2实例内部类 即未被static修饰的成员内部类。...实例内部类的非静态方法中包含了一个指向外部类对象的引用。 外部类中,不能直接访问实例内部类中的成员,如果要访问必须要先创建内部类对象。
内部类一般包括这四种:成员内部类、静态内部类、局部内部类和匿名内部类。 每个内部类都能独立地实现一个接口或者抽象类,所以无论其所属的主类是否已经实现一个接口或者抽象类,对于内部类都没有影响。...成员内部类和静态内部类用private/protected/public修饰时,外部访问规则与访问对应外部类的属性/方法的规则一样;局部内部类不能使用访问修饰符修饰;匿名内部类甚至都不用class关键字来定义...//内部类调用对应主类的同名方法 } } } (1)成员内部类对象中不能定义静态变量、静态方法 (2)要创建成员内部类对象,必须要先创建对应外部类的对象 (3)成员内部类引用对应主类的同名属性...、构造代码块、方法中 (2)局部内部类不可以用访问修饰符(private/protected/public)修饰 4、匿名内部类 匿名内部类也是一种局部内部类,不需要用class关键字来声明,匿名内部类通常是一个抽象类或接口的实现.../方法 (2)匿名内部类中不能定义构造函数 (3)匿名内部类中引用的外界变量必须为final
在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
新增了一个java文件 使用内部类,将Part类的定义写入MyClass内部 1. 可以减少多余的可见性,例如可把Part在MyClass内部定义为私有,这样对同一包内其他类也不可见了 2....,但实际上内部类的作用机制还是比较复杂的。...(); } } 结果输出: 内部数据 如此可见,内部类内声明的数据会覆盖外部类的同名数据。...(基本类型数据拷贝副本,对象等则拷贝引用) OK,现在的情况是: 方法内的局部类对data拷贝了两次:外部方法outterPrint值传递时的拷贝,和LocalInner构造函数的拷贝 方法内除了局部类外的作用域只拷贝了...,是在定义一个内部类的同时实例化该内部类: new Other() { /* 匿名内部类的类体 */ }; // new操作和定义类的代码是紧紧结合在一起的 匿名函数的作用 用匿名函数的作用在于在一些特定的场景下写起来很简单
内部类 内部类:可以将一个类定义在另一个类或者一个方法的内部,前者称为内部类,后者称为外部类。...内部类的类型 ⭐️⭐️⭐️⭐️⭐️静态内部类 package demo4_Inner_Class; class Outer{ public int data1 = 1; private...(); } } 在静态内部类中不可以直接访问外部类对象的非静态成员变量,因为外部类对象的成员依赖于外部类的对象。...常量在变异的时候确定 public static final int data6 = 6; public void test(){ //访问类内成员变量...匿名内部类的本质是一个局部类,它在声明和实例化的同时进行定义。
领取专属 10元无门槛券
手把手带您无忧上云