今天稍微复习一下 静态内部类和 内部类的相关知识,平常很少用 静态内部类 静态内部类,不能访问外部类的非静态成员 静态内部类 不需要创建外部类的对象就可访问(外部类名.内部类 比如new MyMain.Person...protected,private修饰 public static class Person { // 静态内部类中可以定义静态或者非静态的成员 private String address = "...,直接可以 new Person(); 当然如果在外部类中访问这个静态内部类,则必须 new MyMain.Person(); 这个时候我试验了一下 如果定义person类为 private static...{ new MyMain.Person().display();//The type MyMain.Person is not visible } } 内部类 内部类中不能有静态成员 可以访问外部类的成员变量...(外部类名.this.变量名) 可以定义在方法外(可以有访问修饰符)和方法内(不能有访问修饰符,这个就是匿名内部类了) public class TestInner { private static
内部类的概述: 把类定义在另一个类的内部,该类就被称为内部类。 举例:把类B定义在类A中,类B就被称为内部类。...内部类的访问特点: A:内部类可以直接访问外部类的成员,包括私有成员。 B:外部类要想访问内部类成员,必须创建内部类的对象,通过内部类的对象去访问。 示例代码如下: ?...内部类的分类(内部类的位置): ?
参考链接: Java中的嵌套类 在Java中我们在一个类的内部再定义一个类,如下所示: class OuterClass { ... ...内部类与静态嵌套类虽然都是嵌套类,但在使用上是有一些区别的。 内部类 比如有如下内部类的定义, class OuterClass { ... ...这样innerObject就可以访问outerObject内的所有成员属性以及方法了。 那如果想直接跳过外围类去初始化内部类会怎么样呢?...(); 由于静态嵌套类的本质就是一个静态类,所以其实例对象的初始化不需要也不能像内部类那样需要绑定一个外围类对象。...综上所述,虽然内部类和静态嵌套类都属于嵌套类,但是二者有本质区别:内部类的实例化对象需要绑定一个外围类的实例化对象,而静态嵌套类的实例化对象不能也无法绑定外围类的实例化对象。
成员内部类 成员内部类 :定义在类中方法外的类。 定义格式: class 外部类 { class 内部类{ } } 在描述事物时,若一个事物内部还包含其他事物,就可以使用内部类这种结构。...比如,电脑类Computer 中包含中央处理器类Cpu ,这时, Cpu 就可以使用内部类来描述,定义在成员位置。...比如,PersonHeart.class 匿名内部类 匿名内部类 :是内部类的简化写法。它的本质是一个带具体实现的父类或者父接口的 匿名的 子类对象。开发中,最常用到的内部类就是匿名内部类了。...以接口举例,当你使用一个接口时,似乎得做如下几步操作: 定义子类 重写接口中的方法 创建子类对象 调用重写后的方法 我们的目的,最终只是为了调用方法,那么能不能简化一下,把以上四步合成一步呢?...InnerDemo { public static void main(String[] args) { /** 1.等号右边:是匿名内部类,定义并创建该接口的子类对象
静态内部类 匿名内部类 内部类定义 将一个类定义放到另一个类的内部,这就是内部类 内部类与组合是完全不同的概念 内部类指的是类的定义在内部 看起来像一种代码隐藏机制 但是,远不止于此,因为他了解外部类...,局部内部类定义了之后在局部区域内仍旧可以创建多个对象 匿名内部类声明一个类之后就只能创建一个对象了,因为他并没有类名字 形式为: new xxxClass (){ //或者new xxxInterface...,内部类没有更新重写增加任何的方法 设置了一个初始化块 {} ,初始化块会在每个对象构造的时候执行 代码块中调用add方法增加对象 静态内部类 如果使用内部类只是为了将一个类隐藏到一个类的内部 并不需要内部类引用外部类的对象...,需要调用父类的构造方法 所以会打印A constructor 然后构造方法中创建C对象,然后是A ....C constructor 显然,这并不是B类中的C 所以说: 两个类之间的继承,不存在内部类被覆盖的情况...A的C 当创建b.new C(); 的时候使用的是B的C 显然, 创建内部类对象时,到底是父类中的还是子类中的 是由: .new 前面的类型决定的,也就是定义的类型,而不是实际指向的类型 多层嵌套的内部类
比如,电脑Computer类中包含鼠标 Mouse类 ,这时, Computer 就可以使用内部类来描述,定义在成员位置。...2、局部内部类 局部内部类是定义在一个方法或者一个作用域里面的类,它和成员内部类的区别在于局部内部类的访问仅限于方法内或者该作用域内。...静态内部类是不需要依赖于外部类的,这点和类的静态成员属性有点类似,并且它不能使用外部类的非static成员变量或者方法,这点很好理解,因为在没有外部类的对象的情况下,可以创建静态内部类的对象,如果允许访问外部类的非...它的本质是一个带具体实现的父类或者父接口的匿名的子类对象。是最常用的内部类方式。 4.1、定义格式 匿名内部类必须继承一个父类或者实现一个父接口。...匿名内部类有两个步骤: a.临时定义一个类型的子类 b.定义后即刻创建刚刚定义的这个类的对象 new 父类名或者接口名(){ <span
、肢体、器官等身体结果组成,而内部类相当于其中的某个器官之一,例如心脏:它也有自己的属性和行为(血液、跳动) 显然,此处不能单方面用属性或者方法表示一个心脏,而需要一个类 而心脏又在人体当中,正如同是内部类在外部内当中...Out.In in = new Out().new In()可以用来生成内部类的对象,这种方法存在两个小知识点需要注意 1.开头的Out是为了标明需要生成的内部类对象在哪个外部类当中 2.必须先有外部类的对象才能生成内部类的对象...,因为内部类的作用就是为了访问外部类中的成员变量 实例2:内部类中的变量访问形式 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17...:13 外部类变量:12 从实例1中可以发现,内部类在没有同名成员变量和局部变量的情况下,内部类会直接访问外部类的成员变量,而无需指定Out.this.属性名 否则,内部类中的局部变量会覆盖外部类的成员变量...我们将内部类移到了外部类的方法中,然后在外部类的方法中再生成一个内部类对象去调用内部类方法 如果此时我们需要往外部类的方法中传入参数,那么外部类的方法形参必须使用final定义 至于final在这里并没有特殊含义
首先我们需要了解什么叫匿名内部类:定义(JAVA核心技术上是这样说的) 匿名内部类(anonymous inner calss):将局部内部类的使用再深入一步。...假如只创建这个类的一个对象,就不必命名了。这种类被称为匿名内部类。 话很少,说的也很浅显,可能读完了还不知道什么叫匿名内部类?...是的,确实有这种感觉, 重点就两个: 1.只创建这个类的一个对象;->这个是从局部内部类中延伸来的,整个代码中只有一次创建,没有说明什么 2.不必命名:->匿名内部类是没有名字的。...我们知道创建类是需要用到一个构造器的,构造器的名字与类名是同名的。 现在匿名内部类没有名字,肯定用不了构造器的。也就是说匿名内部类一定没有构造器的。...; } }; superduck.speak(); } } 结果: 我是一只会说话的鸭子,你知道我叫什么吗? 我是唐老鸭,你是不是在1秒内想到 我呢?
匿名内部类也就是没有名字的内部类 正因为没有名字,所以匿名内部类只能使用一次,它通常用来简化代码编写 但使用匿名内部类还有个前提条件:必须继承一个父类或实现一个接口 实例1:不使用匿名内部类来实现抽象方法...这个时候就引入了匿名内部类 实例2:匿名内部类的基本实现 abstract class Person { public abstract void eat(); } public class...something"); } }; p.eat(); } } 运行结果:eat something 可以看到,我们直接将抽象类Person中的方法在大括号中实现了...,那么其子类中的方法都可以使用匿名内部类来实现 最常用的情况就是在多线程的实现上,因为要实现多线程必须继承Thread类或是继承Runnable接口 实例4:Thread类的匿名内部类实现 public...}; Thread t = new Thread(r); t.start(); } } 运行结果:1 2 3 4 5 文章转载于:java中的匿名内部类总结
成员内部类的对象必须通过外部类的对象创建 in.test(); } } Console: 在成员内部类的方法中 调用外部类的静态方法 调用外部类的非静态方法 4 2.静态内部类...局部内部类只能在方法内部中使用,一旦方法执行完毕,局部内部类就会从内存中删除。 必须注意:如果局部内部类中要使用他所在方法中的局部变量,那么就需要将这个局部变量定义为final的。..."); System.out.println(c);//注意:如果局部内部类中要使用他所在方法中的局部变量,那么就需要将这个局部变量定义为final的。...匿名内部类的定义与对象的创建合并在一起,匿名内部类一般通过如下形式定义,并且在定义的同时进行对象的实例化。 ...new 类或者接口的名字(){ //匿名内部类的主体,大括号中是匿名内部类的主体,这个主体就是类或者接口的实现,如果是类,那么匿名内部类是该类的子类,如果是接口,匿名内部类需要完成接口的实现
匿名内部类在开发中的使用 我们在开发的时候,会看到抽象类,或者接口作为方法的形式参数。 而这个时候,我们知道实际需要的是一个子类的对象。...如果该方法仅仅调用一次,我们就可以使用匿名内部类的格式进行简化。 Android开发中这种格式见得多, JavaEE开发中见得少。 为什么呢?...示例代码如下: 1 /* 2 匿名内部类在开发中的使用: 3 Android开发中这种格式见得多, 4 JavaEE开发中见得少。...10 */ 11 12 //定义一个接口 13 interface Person { 14 public abstract void study(); 15 } 16 17 //定义具体类实现接口...,需要的是该接口的实现类的对象。
1.什么是内部类? Java类中不仅可以定义变量和方法,还可以定义类,在类内部定义的类就被称为内部类。...根据定义的方式不同,可以将内部类分为四种: 成员内部类 局部(方法)内部类 静态内部类 匿名内部类 2.为什么要使用内部类? ...使用内部类最吸引人的原因是:每个内部类都能独立地继承一个(接口的)实现,所以无论外围类是否已经继承了某个(接口的)实现,对于内部类都没有影响。...——《Think in java》 使用内部类的优势: 内部类可以继承父类、实现接口 内部类可以用多个实例,每个实例都有自己的状态信息,并且与其他外围对象的信息相互独立 内部类并没有令人迷惑的...“is-a”关系,他就是一个独立的实体 内部类提供了更好的封装,除了该外围类,其他类都不能访问 创建内部类对象的时刻并不依赖于外围类对象的创建
. */ ThreadLocal.ThreadLocalMap threadLocals = null; 其中ThreadLocalMap类的定义是在ThreadLocal类中,真正的引用却是在...Thread类中。...同时,ThreadLocalMap中用于存储数据的entry定义: static class Entry extends WeakReference<ThreadLocal<?...Object v) { super(k); value = v; } } 从中我们可以发现这个Map的key...是ThreadLocal类的实例对象,value为用户的值,并不是网上大多数的例子key是线程的名字或者标识。
成员内部类的常见修饰符及应用: private 为了保证数据的安全性 static 为了方便访问数据 注意:静态的内部类访问外部类的数据时,外部类的数据必须用静态修饰...成员内部类不是静态的,访问的格式: ?
内部类是指在一个外部类的内部再定义一个类。类名不需要和文件夹相同。 *内部类可以是静态static的,也可用public,default,protected和private修饰。...局部内部类 局部内部类,是指内部类定义在方法和作用域内。...声明为static的内部类,不需要内部类对象和外部类对象之间的联系,就是说我们可以直接引用outer.inner,即不需要创建外部类,也不需要创建内部类。...首先,内部类被编译的时候会生成一个单独的内部类的.class文件,这个文件并不与外部类在同一class文件中。 ...,如果编程人员在程序设计的时候在内部类中改掉参数的值,但是外部调用的时候又发现值其实没有被改掉,这就让人非常的难以理解和接受,为了避免这种尴尬的问题存在,所以编译器设计人员把内部类能够使用的参数设定为必须是
有时候我们需要把一批互相关联的API用不同的类提供给用户,以便简化每个类的使用难度。但是这样这些类之间的数据共享就成了问题。...JAVA的内部类可以自由的访问外围类的所有数据,所以很时候做这的工作,而如果C++也这样做,就变成要增加很多setter和getter。...但是,也可以用以下方法模拟实现: 首先,你的内部类头文件一般是被外围类所#include的,所以需要在内部类的声明前增加“前置声明”: namespace outerspace{ class OuterClass...以上是内部类的设定,外部类就很简单,只需要保存内部类的指针,然后设置好内部类为友元就可以了: friend InnerClass; private: InnerClass inner_obj; 外部类则需要在初始化过程中设置...在设计API的过程中,内部类需要用到外部类任何成员,包括是private的,都可以用 outer_obj->XXX直接引用。而外部类则可以直接返回内部类的指针(引用)给使用者。
---- 一、什么是内部类 Java 中的内部类是定义在其他类内部的类。 内部类可以访问外部类的成员(包括私有成员),并且可以起到隐藏和封装的作用。...方法内部类:定义在方法内部的类,只能在该方法的作用域内使用。方法内部类可以访问外部类的成员(包括方法的参数和局部变量),但是只能访问 final 修饰的局部变量。...通过将内部类定义在需要使用的地方,可以减少类的数量,简化代码结构。 实现多重继承:内部类可以实现多重继承,一个类可以同时继承多个内部类。...这样可以实现对外部类私有成员的访问和操作,增强了内部类的功能。 匿名内部类:内部类可以用于创建只需要使用一次的类,即匿名内部类。...通过匿名内部类,可以在创建接口对象或继承父类的时候,快速定义相关的实现逻辑,简化代码。 ---- 四、内部类面试题 Java 中的内部类有哪几种类型?分别描述它们之间的区别和使用场景。
下面的例子说明匿名内部类的匿名构造函数的用法 例2.7.2 interface FigureMark_to_win { void whoAmI(); } public class Test {
(j);//在内部类中访问内部类自 己的变量直接用变量名 System.out.println(this.j);//或者用this.变量名 System.out.println(Outer.this.j...);//在内部类中 访问外部类中与内部类同名的实例变量用 外部类名.this.变量名 System.out.println(k);//如果内部类中没有与外部 类同名的变量,则可以直接用变量名访问外部类变量...(即使将外部类声 明为PRIVATE,但是对于处于其内部的内部类还是可见的。) ⑵用内部类定义在外部类中不可访问的属性。这样就在外部类中实现了比外部类的 private还要小的访问权限。...要想使用局部内部类时需要生成对象,对象调用方法,在方法中才能调用其局部内部 类。...2,只是为了获得一个对象实例,不许要知道其实际类型。 3,类名没有意义,也就是不需要使用到。
领取专属 10元无门槛券
手把手带您无忧上云