首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Java学习之final匿名部类

Java学习之final匿名部类 0x00 前言 续上几篇文章,得知子类继承父类后是可以在父类的基础上进行改写的,那么在程序中有些东西可能是不能让我们给轻易给改动的,那么Java给提供了final关键字...内部类仍然是一个独立的类,在编译之后会内部类会被编译成独立的.class文件,但是前面冠以外部类的类名 和$符号 。 匿名部类 匿名部类是内部类的简化写法。...他的本质是一个带有具体实现父类或父类接口的匿名子对象。 在代码中比较常用的可能就是匿名部类。...前提条件是匿名部类必须继承一个父类或者是父接口。...,如多线程创建的时候,因为线程不能被多次调用,可以直接使用匿名部类进行创建。

32430

java初级笔记----final、static、匿名对象、内部类

一、final 1、final可以用来修饰类,方法,成员变量, 2、final修饰类不可以被继承,但是可以继承其他类。...3、final修饰的方法不可以被覆盖,但父类中没有被final修饰方法,子类覆盖后可以加final。 4、final修饰的变量称为常量,这些变量只能赋值一次。...三、匿名对象 匿名对象是指创建对象时,只有创建对象的语句,却没有把对象地址值赋值给某个变量。...例:new Person(); 1、只能使用一次 2、匿名对象可以作为方法接收的参数、方法返回值使用 四、内部类 将类写在其他类的内部,可以写在其他类的成员位置和局部位置,这时写在其他类内部的类就称为内部类...//调用外部类中的puffBall方法 p.puffBall(); } 六、匿名部类 匿名部类的本质是一个实现了接口或继承了某个类的子类匿名对象. public

81730
您找到你想要的搜索结果了吗?
是的
没有找到

java匿名部类变量要使用final的原因(转载)

原文链接:https://www.cnblogs.com/devilwind/p/8635946.html java为什么匿名部类的参数引用时final(转) https://blog.csdn.net...别扭的匿名部类 但Java匿名部类就做得比较尴尬。下面这个例子中,getAnnoInner负责返回一个匿名部类的引用。...匿名部类因为是匿名,所以不能显式地声明构造函数,也不能往构造函数里传参数。...这就说明,外部方法getAnnoInner()事实上已经对内部类AnnoInner构成了一个闭包。 但这里别扭的地方是这两个x和y都必须用final修饰,不可以修改。...其他和匿名部类相似的结构 《Think in Java》书里,只点出了匿名部类来自外部闭包环境的自由变量必须是final的。但实际上,其他几种不太常用的内部类形式,也都有这个特性。

1.3K00

java匿名部类

这意味着for循环中的一个new语句会创建相同匿名类的几个实例,而不是创建几个不同匿名类的一个实例。 在使用匿名部类时,要记住以下几个原则:  ·匿名部类不能有构造方法。   ...·匿名部类不能定义任何静态成员、方法和类。   ·匿名部类不能是public,protected,private,static。   ·只能创建匿名部类的一个实例。  ...·一个匿名部类一定是在new的后面,用其隐含实现一个接口或实现一个类。   ·因匿名部类为局部内部类,所以局部内部类的所有限制都对其生效。  ...·内部类只能访问外部类的静态变量或静态方法。 匿名类和内部类中的中的this : 有时候,我们会用到一些内部类匿名类。当在匿名类中用this时,这个this则指的是匿名类或内部类本身。...这时如果我们要使用外部类的方法和变量的话,则应该加上外部类的类名 3.匿名部类的作用  Java的内部类和C++中的嵌套类有本质的不同:C++的嵌套类没有指向包装类的句柄。

93080

anonymousinnerclass(匿名部类)

anonymousinnerclass(匿名部类)是否可以extends(继承)其它类,是否可以implements(实现)interface(接口)?...匿名部类在实现时必须借助一个接口或者一个抽象类或者一个普通类来构造,从这过层次上讲匿名部类是实现了接口或者继承了类,但是不能通过extends或implement关键词来继承类或实现接口。...几点说明: 一、由于匿名部类没有名字,所以它没有构造函数。因为没有构造函数,所以它必须完全借用父类的构造函数来实例化,匿名部类完全把创建对象的任务交给了父类去完成。...二、在匿名部类里创建新的方法没有太大意义,但它可以通过覆盖父类的方法达到神奇效果,如上例所示。这是多态性的体现。...三、因为匿名部类没有名字,所以无法进行向下的强制类型转换,持有对一个匿名部类对象引用的变量类型一定是它的直接或间接父类类型。 四、注意匿名部类的声明是在编译时进行的,实例化在运行时进行。

42840

Java 匿名部类

Java 匿名部类 匿名部类的存在作用; interface Mesage{ public void print() ; } class Message implements Mesage...msg.print() ; } } 正常的规律一个接口或者抽象类需要有子类,子类要覆写所有的抽象方法;但如果,message子类只使用唯一的一次;所以,可以采用匿名部类的方式进行代码的简化...public static void fun(Message msg) { msg.print() ; } } 上述的简便方法,称为 匿名部类...使用匿名部类前提是:必须基于接口或抽象类的应用;可以简约了一个继承/接口实现的子类的产生。...匿名部类定义在方法中,方法的参数或者变量,要被匿名部类所访问,必须加上 final 关键字。 匿名部类帮助我们减少了无用的且必要的类的定义。

38710

【小家java】匿名部类为什么只能使用外部final的变量

1、概述 各位都知道,匿名部类在使用的时候需要使用外部的变量,该变量必须被final修饰,否则编译报错。实际使用中,有时候确实还给我们造成了不少麻烦,可大家可曾想过这是为什么吗?...用final修饰的成员变量表示常量,存在内存中的常量区(常量区位于堆区)(jvm内存结构),放在常量区里面,所以效率上相对来说会高那么一点。 为什么匿名部类用的变量必须final呢?...,因为程序的运行由外而的,所以外部根本无法确定内部这时到底有没有这个东西。...对final的使用补充解释,可参考博文java中final关键字使用详解 备注:匿名部类在编译时也是会生成一个.class文件的哦。具体可参考我做的一个例子:匿名部类生成.class文件吗?...3、使用场景 匿名部类的使用也是非常非常多的,所以理解为什么,能够更好的使用内部类,从而可以更优美的去规划自己的代码结构 4、最后 任何一向规定、规范都不是凭空制定而且也不可能随便下定义的。

83140

java匿名部类简介

匿名部类也就是没有名字的内部类 正因为没有名字,所以匿名部类只能使用一次,它通常用来简化代码编写 但使用匿名部类还有个前提条件:必须继承一个父类或实现一个接口 实例1:不使用匿名部类来实现抽象方法...这个时候就引入了匿名部类 实例2:匿名部类的基本实现 abstract class Person { public abstract void eat(); } public class Demo...实例3:在接口上使用匿名部类 interface Person { public void eat(); } public class Demo { public static void main...最常用的情况就是在多线程的实现上,因为要实现多线程必须继承Thread类或是继承Runnable接口 实例4:Thread类的匿名部类实现 public class Demo { public static...= 1; i <= 5; i++) { System.out.print(i + " "); } } }; t.start(); } } 运行结果:1 2 3 4 5 实例5:Runnable接口的匿名部类实现

62770

什么是匿名部类

匿名部类 :是内部类的简化写法。它的本质是一个 带具体实现的 父类或者父接口的 匿名的 子类对象。...如果接口的实现类(或者是父类的子类)只需要使用唯一的一次, 那么这种情况下就可以省略掉该类的定义,而改为使用【匿名部类】。...匿名部类的定义格式: 接口名称 对象名 = new 接口名称() { // 覆盖重写所有抽象方法 }; 对格式“new 接口名称() {…}”进行解析: new代表创建对象的动作 接口名称就是匿名部类需要实现哪个接口...{…}这才是匿名部类的内容 另外还要注意几点问题: 匿名部类,在【创建对象】的时候,只能使用唯一一次。...匿名部类是省略了【实现类/子类名称】,但是匿名对象是省略了【对象名称】 强调:匿名部类匿名对象不是一回事!!!

22710

Java内部类-成员内部类、局部内部类匿名部类、静态内部类

2.局部内部类 局部内部类是定义在一个方法或者一个作用域里面的类,它和成员内部类的区别在于局部内部类的访问仅限于方法或者该作用域。...**总结下来有这几点: (1)局部内部类可以直接访问外部类的所有成员,包含私有的; (2)不能添加修饰符,因为它是一个局部变量,局部变量是不能使用修饰符的,但是可以用final修饰,因为局部变量是可以使用...final修饰的。...(4)局部内部类访问外部类的成员属性或者方法时,直接访问; (5)外部类访问局部内部类的成员属性或者方法时,通过先创建对象,再访问,且必须要在作用域。...匿名部类是唯一一种没有构造器的类。正因为其没有构造器,所以匿名部类的使用范围非常有限,大部分匿名部类用于接口回调。 匿名部类在编译的时候由系统自动起名为 Outer$1.class。

1K10

java_内部类匿名部类的使用

部类的分类 成员内部类,类定义在了成员位置 (类中方法外称为成员位置) 局部内部类,类定义在方法 成员内部类 :定义在类中方法外的类。...class 内部类 { // 成员变量 // 成员方法 } } } 匿名部类 匿名部类 :是内部类的简化写法。...它的本质是一个 带具体实现的父类或者父接口的匿名的子类对象 匿名部类必须继承一个父类或者实现一个父接口。...new 父类名或者接口名(){ // 方法重写 @Override public void method() { // 执行语句 } }; 以接口为例,匿名部类的使用...定义一个没有名字的内部类 这个类实现了Swim接口 创建了这个没有名字的类的对象 匿名部类的使用场景 通常在方法的形式参数是接口或者抽象类时,也可以将匿名部类作为参数传递。

61530

Java中的内部类匿名部类详解

文章目录 内部类 什么是内部类 成员内部类 访问特点 匿名部类 前提 格式 使用方式 内部类 什么是内部类 将一个类A定义在另一个类B里面,里面的那个类A就称为内部类,B则称为外部类。...比如,PersonHeart.class 匿名部类 匿名部类 :是内部类的简化写法。它的本质是一个带具体实现的父类或者父接口的 匿名的 子类对象。开发中,最常用到的内部类就是匿名部类了。...匿名部类就是做这样的快捷方式。 前提 匿名部类必须继承一个父类或者实现一个父接口。...格式 new 父类名或者接口名(){ // 方法重写 @Override public void method() { // 执行语句 } }; 使用方式 以接口为例,匿名部类的使用...,代码如下: 定义接口: public abstract class FlyAble{ public abstract void fly(); } 创建匿名部类,并调用: public class

1.4K30

Java内部类——静态和非静态内部类匿名部类、方法内部类

,并没有外部类的引用,也就无法调用外部类自己的方法,同时也就屏蔽了外部类的操作 但是如果在内部类中写上外部类的引用和get方法,就可以在这种定义方式的前提下获得外部类的引用了。...静态内部类和非静态内部类是有区别的: 内部类有外部类的this指针,但是静态内部类是没有外部类的this指针的,毕竟两者创建的时间也不用。...这就直接导致了静态内部类无法直接通过this指针访问外部类的变量。...静态内部类和内部类的调用方法也不同(这是当然的) image.png image.png 匿名部类 public class NoNameInnerClass { public static...new AA() { @Override public void aa() { System.out.println("匿名部类的方法执行

89830
领券