-
2019-11-01 08:51:23
匿名类的特点: 1:将一组只读属性封装到单个对象中,不需要预先定义一个类型 2:类型名有编译器产生,每个属性的类型由编辑器推断出来 static void Main(string[] args) { var student =new {name="张三",Age=20}; Console.WriteLine(student.name); Console.WriteLine(student.Age); Console.ReadKey(); } 匿名类型使用方法: 1:使用var定义匿名类型变量 2:直接作为方法参数值进行传递 在mvc 路由规则中的默认参数会看到 public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute( name: "Default", url: "{controller}/{action}/{id}", defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }// 这个就是匿名类 ); }
更多相关内容 -
Java匿名类,匿名内部类实例分析
2020-08-19 08:21:00主要介绍了Java匿名类,匿名内部类,结合实例形式分析了Java匿名类,匿名内部类相关原理、用法及操作注意事项,需要的朋友可以参考下 -
Java为什么匿名内部类参数引用需要用final进行修饰?
2020-08-26 03:12:04今天小编就为大家分享一篇关于Java为什么匿名内部类参数引用需要用final进行修饰?,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧 -
详细解读C++编程中的匿名类类型和位域
2020-09-02 21:05:50主要介绍了C++编程中的匿名类类型和位域,是C++入门学习中的基础知识,需要的朋友可以参考下 -
匿名类的定义,使用场景和使用方式
2021-05-24 12:37:25匿名内部类又叫匿名类,它有点像局部类(Local Class)或者内部类(Inner Class),只是匿名内部类没有名字,我们可以同时声明并实例化一个匿名内部类。 一个匿名内部类仅适用在想使用一个局部类并且只会使用这个局部类...定义
匿名内部类又叫匿名类,它有点像局部类(Local Class)或者内部类(Inner Class),只是匿名内部类没有名字,我们可以同时声明并实例化一个匿名内部类。
一个匿名内部类仅适用在想使用一个局部类并且只会使用这个局部类一次的场景。
匿名内部类是没有需要明确声明的构造函数的,但是会有一个隐藏的自动声明的构造函数。
创建匿名内部类有两种办法:
- 通过继承一个类(具体或者抽象都可以)去创建出匿名内部类
- 通过实现一个接口创建出匿名内部类
咱们看看下面的例子:
// 接口:程序员 interface Programmer { void develop(); } public class TestAnonymousClass { public static Programmer programmer = new Programmer() { @Override public void develop() { System.out.println("我是在类中实现了接口的匿名内部类"); } }; public static void main(String[] args) { Programmer anotherProgrammer = new Programmer() { @Override public void develop() { System.out.println("我是在方法中实现了接口的匿名内部类"); } }; TestAnonymousClass.programmer.develop(); anotherProgrammer.develop(); } }
从上面的例子可以看出,匿名类既可以在类中也可以在方法中被创建。
之前我们也提及匿名类既可以继承一个具体类或者抽象类,也可以实现一个接口。所以在上面的代码里,我创建了一个叫做 Programmer 的接口,并在 TestAnonymousClass 这个类中和 main() 方法中分别实现了接口。
Programmer除了接口以外既可以是一个抽象类也可以是一个具体类。
抽象类,像下面的代码一样:
public abstract class Programmer { public abstract void develop(); }
具体类代码如下:
public class Programmer { public void develop() { System.out.println("我是一个具体类"); } }
OK,继续深入,那么如果 Programmer 这个类没有无参构造函数怎么办?我们可以在匿名类中访问类变量吗?我们如果继承一个类,需要在匿名类中实现所有方法吗?
public class Programmer { protected int age; public Programmer(int age) { this.age = age; } public void showAge() { System.out.println("年龄:" + age); } public void develop() { System.out.println("开发中……除了异性,他人勿扰"); } public static void main(String[] args) { Programmer programmer = new Programmer(38) { @Override public void showAge() { System.out.println("在匿名类中的showAge方法:" + age); } }; programmer.showAge(); } }
- 构造匿名类时,我们可以使用任何构造函数。上面的代码可以看到我们使用了带参数的构造函数。
- 匿名类可以继承具体类或者抽象类,也能实现接口。所以访问修饰符规则同普通类是一样的。子类可以访问父类中的 protected 限制的属性,但是无法访问 private 限制的属性。
- 如果匿名类继承了具体类,比如上面代码中的 Programmer 类,那么就不必重写所有方法。但是如果匿名类继承了一个抽象类或者实现了一个接口,那么这个匿名类就必须实现所有没有实现的抽象方法。
- 在一个匿名内部类中你不能使用静态初始化,也没办法添加静态变量。
- 匿名内部类中可以有被 final 修饰的静态常量。
匿名类的典型使用场景:
- 临时使用:我们有时候需要添加一些类的临时实现去修复一些问题或者添加一些功能。为了避免在项目里添加java文件,尤其是仅使用一次这个类的时候,我们就会使用匿名类。
- UI Event Listeners:在java的图形界面编程中,匿名类最常使用的场景就是去创建一个事件监听器。比如:
button.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { } });
上面的代码中,我们通过匿名类实现了 setOnClickListener 接口,当用户点击按钮的时候,就会触发我们实现的 onClick 方法。
-
Java匿名内部类的写法示例
2020-09-07 17:48:59主要给大家介绍了关于Java匿名内部类的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 -
Java中匿名类的两种实现方式
2020-08-31 12:49:39本文主要介绍了Java中匿名类的两种实现方式。具有很好的参考价值,下面跟着小编一起来看下吧 -
简单谈谈java中匿名内部类构造函数
2020-09-03 04:50:50主要简单给我们介绍了java中匿名内部类构造函数,并附上了简单的示例,有需要的小伙伴可以参考下。 -
Java局部内部类和匿名内部类定义与用法实例分析
2020-08-25 18:39:29主要介绍了Java局部内部类和匿名内部类,结合实例形式分析了java局部内部类和匿名内部类相关定义、原理与用法,需要的朋友可以参考下 -
Java通过匿名类来实现回调函数实例总结
2020-08-29 15:17:37主要介绍了Java通过匿名类来实现回调函数的例子,回调函数就是一种函数签名(若干个输入参数、一个输出参数)的规范,java虽不存在函数声明,但是java可以用接口来强制规范。具体操作步骤大家可查看下文的详细讲解,... -
java中的匿名内部类详细总结
2020-09-04 22:49:16以下是对java中的匿名内部类进行了详细的总结介绍,需要的朋友可以过来参考下,希望对大家有所帮助 -
Java提高篇之详解匿名内部类
2021-01-20 03:41:28在这篇博客中你可以了解到匿名内部类的使用、匿名内部类要注意的事项、如何初始化匿名内部类、匿名内部类使用的形参为何要为final。 一、使用匿名内部类内部类 匿名内部类由于没有名字,所以它的创建方式有... -
Kotlin 匿名类实现接口和抽象类的区别详解
2020-08-19 12:46:03主要介绍了Kotlin 匿名类实现接口和抽象类的区别详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧 -
匿名内部类
2020-12-22 12:07:091.什么是匿名内部类 所谓匿名内部类(anonymous inner class),是指可以利用内部类创建没有名称的对象,它一步完成了声明内部类和创建该类的一个对象,并利用该对象访问到类内的成员,这种类不取名字,而是直接用... -
Java中的匿名内部类小结
2020-09-02 00:18:28java内部类分为: 成员内部类、静态嵌套类、方法内部类、匿名内部类。这篇文章主要介绍了Java中的匿名内部类的相关资料,需要的朋友可以参考下 -
什么是匿名内部类,如何使用匿名内部类
2020-11-12 14:09:48为什么要使用匿名内部类 在实际开发中,我们常常遇到这样的情况:一个接口/类的方法的某个实现方式在程序中只会执行一次,但为了使用它,我们需要创建它的实现类/子类去实现/重写。此时可以使用匿名内部类的方式,...匿名内部类
匿名内部类,就是没有名字的一种嵌套类。它是Java对类的定义方式之一。
为什么要使用匿名内部类
在实际开发中,我们常常遇到这样的情况:一个接口/类的方法的某个实现方式在程序中只会执行一次,但为了使用它,我们需要创建它的实现类/子类去实现/重写。此时可以使用匿名内部类的方式,可以无需创建新的类,减少代码冗余。
下面详细说明一下
假设当前有一个接口,接口中只有一个方法
public interface Interface01 { void show(); }
为了使用该接口的show方法,我们需要去创建一个实现类,同时书写show方法的具体实现方式
public class Interface01Impl implements Interface01{ @Override public void show() { System.out.println("I'm a impl class..."); } }
如果实现类Interface01Impl全程只使用一次,那么为了这一次的使用去创建一个类,未免太过麻烦。我们需要一个方式来帮助我们摆脱这个困境。匿名内部类则可以很好的解决这个问题。
我们使用匿名内部类
public static void main(String[] args) { Interface01 interface01 = new Interface01() { @Override public void show() { System.out.println("这里使用了匿名内部类"); } }; //调用接口方法 interface01.show(); }
成功运行结果
这里使用了匿名内部类
如何使用匿名内部类
基本格式
new 接口/类名(参数1, 参数2...){ 实现方法1(){ } 实现方法2(){ } ...... };
在上文的使用中,我们没有创建实现类就实现了具体的show方法。同时定义了接口的对象变量interface01。我们发现,这个变量和平常使用多态后的使用方式没有区别。
通常,我们也习惯用这样的方式创建并启动线程
new Thread(new Runnable() { @Override public void run() { System.out.println("我是一个线程"); } }).start();
常见问题
-
匿名内部类是怎么实现的
在上文代码编译后,我们查看一下class文件的路径
再反编译一下看看
至此,我们可以得知,匿名内部类在编译期间,会生成一个名称以
$编号
结尾的class文件,即它被识别为一个真实的类,仅在编译前(java文件)为匿名的形态。-
匿名内部类只可以使用在接口上吗
不是的。匿名内部类可以用在具体类、抽象类、接口上,且对方法个数没有要求。
举例说明:设存在具体类Class01,抽象类AbstractClass01,接口Interface01
//具体类 public class Class01 { public void show(String s){ System.out.println("啦啦啦"); } }
//抽象类 public abstract class AbstractClass01 { abstract void show(String s); }
//接口 public interface Interface01 { void show(String s); }
测试类TestInner
public class TestInner { public static void main(String[] args) { //重写具体类的方法 new Class01(){ @Override public void show(String s) { System.out.println("我是一个" + s); } }.show("具体类"); //重写抽象类的抽象方法 new AbstractClass01(){ @Override void show(String s) { System.out.println("我是一个" + s); } }.show("抽象类"); //实现接口的抽象方法 new Interface01(){ @Override public void show(String s) { System.out.println("我是一个" + s); } }.show("接口"); } }
运行结果
我是一个具体类
我是一个抽象类
我是一个接口
-
-
java匿名内部类,什么是匿名内部类,如何定义匿名内部类,如何使用匿名内部类?
2019-11-12 11:37:18java匿名内部类什么是匿名内部类?匿名内部类的使用场景?匿名内部类如何创建?匿名内部类的实现和使用例1(实现接口)例2(继承类) 什么是匿名内部类? 匿名内部类,顾名思义,就是不知道这个类到底是什么名字,也...什么是匿名内部类?
匿名内部类,顾名思义,就是不知道这个类到底是什么名字,也就是不知道类名。
匿名内部类的使用场景?
匿名内部类适合创建那种只需要使用一次的类,也就是说创建一个匿名内部类,只需要用一次即可。
匿名内部类如何创建?
new 类名(参数) | 实现接口() { // 匿名内部类的类体部分 } 从上面的定义可以看出,匿名内部类必须继承一个父类,或实现一个接口,但最多只能继承一个父类,或者实现一个接口。 两个规则: 匿名内部类不能是抽象类。 匿名内部类不能定义构造器。由于匿名内部类没有类名,所以无法定义构造器,但匿名内部类可以初始化块,可以通过初始化块来完成构造器需要完成的工作。
匿名内部类的实现和使用
例1(实现接口)
首先,定义一个匿名类要实现的接口,代码如下
public interface Product{ double getPrice(); String getName();
然后,定义一个实体类,实体类定义一个方法,方法的参数为上述的接口对象,到时候会传入一个匿名类对象,这个匿名类实现了上述创建的接口,代码如下
public class Anony{ public void test(Product product){ System.out.println("购买了一个"+product.getName()+",花掉了"+product.getPrice()); } }
最后测试运行:
pubic class Test{ public static void main(String[] args){ Anony anony=new Anony(); // 注意,此处要传入一个匿名类对象 anony.test(new Product(){ @Override public double getPrice(){ return 578.6; } @Override public String getName(){ return "联想笔记本"; } } ); } }
输出:
购买了一个联想笔记本,花掉了578.6
总结:此处匿名内部类的作用就是实现了一个接口,创建了一个实现了该接口的类的对象,然后重写了这个接口中的方法。
例2(继承类)
首先,定义一个匿名类需要实现的抽象类,代码如下:
public abstract class Device{ private String name; public abstract double getPrice(); public String getName(){ return name; } public Device(){} public Device(String name){ this.name=name; } }
然后,定义一个实体类,实体类定义一个方法,方法的参数为上述的抽象类对象,到时候会传入一个匿名类对象,这个匿名类继承了上述创建的抽象类,代码如下
public class Anony { public void test(Device device){ System.out.println("购买了一个"+device.getName()+"花费了"+device.getPrice()); } }
最后测试运行:
pubic class Test{ public static void main(String[] args){ Anony anony=new Anony(); // 注意,此处要传入一个匿名类对象 anony.test(new Device("海尔电视机"){ @Override public double getPrice(){ return 578.6; } ); Device device=new Device(){ @Override public double getPrice(){ return 556.56; } @Override public String getName(){ return "美的电视机"; } }; annoy.test(device); } }
输出:
购买了一个海尔电视机,花掉了578.6 购买了一个美的电视机,花掉了556.56
总结:对象匿名类中继承抽象类,对于抽象类里面的抽象方法,必须要重写,对象抽象类里面的非抽象方法,可重写也可以不重写。
-
Java基础之匿名内部类,匿名内部类是什么?为什么要用匿名内部类,匿名内部类详解。
2021-01-28 17:55:35什么是匿名内部类? 顾名思义 匿名 就是没有名字,一个没有名字的内部类,称为匿名内部类。 下面先看一个例子,比如说你想和你的女朋友去看春节档的《唐人街探案三》 这个时候我们要先定义一个接口,去看唐探3的接口... -
Java 匿名类(匿名内部类)
2020-12-25 23:41:48Java匿名类(匿名内部类) 学习的参考博文:无恨之都 1. 初识 匿名类 标准说法: 内部类包括:成员类、局部类、匿名类(匿名内部类)。 匿名类概念: 匿名类可以使你的代码更加简洁 (JDK8之后Lambda更简洁)。 你可以... -
C#匿名委托和Java匿名局部内部类使用方法示例
2020-09-04 21:22:48Java在嵌套类型这里提供的特性比较多,假设:Java的字节码只支持静态嵌套类,内部类、局部内部类和匿名局部内部类都是编译器提供的语法糖,这个假设目前没法验证(看不懂字节码),本文先来看一下C#是如何为我们提供... -
Java Lambda表达式与匿名内部类的联系和区别实例分析
2020-08-25 13:55:55主要介绍了Java Lambda表达式与匿名内部类的联系和区别,结合实例形式分析了Java Lambda表达式与匿名内部类功能、用法、区别及操作注意事项,需要的朋友可以参考下 -
java中匿名内部类详解
2020-08-30 19:47:50主要对java中的匿名内部类的详细总结,需要的朋友可以参考下 -
JS匿名函数类生成方式实例分析
2020-10-21 01:24:06主要介绍了JS匿名函数类生成方式,结合实例形式分析了javascript匿名函数类相关属性与方法定义与使用技巧,需要的朋友可以参考下 -
匿名内部类是什么?如何访问在其外面定义的变量?
2019-04-25 13:22:39匿名内部类 匿名内部类是没有名字的内部类。 因为没有名字,所以匿名内部类只能只能使用一次,通常用来简化代码编写。 使用匿名内部类有个前提条件:必须继承一个父类或者实现一个接口。 匿名内部类如何访问在... -
java 中使用匿名类直接new接口详解及实例代码
2020-08-31 04:29:25主要介绍了java 中使用匿名类直接new接口详解及实例代码的相关资料,需要的朋友可以参考下 -
Java匿名内部类原理与用法详解
2020-08-25 14:11:52主要介绍了Java匿名内部类原理与用法,结合实例形式分析了Java匿名内部类的概念、原理、应用与相关操作注意事项,需要的朋友可以参考下 -
java中匿名内部类解读分析
2020-09-05 10:56:15本篇文章介绍了,java中匿名内部类解读分析。需要的朋友参考下 -
java基础--list(ArrayList、LinkedList、匿名类).docx
2019-08-07 09:21:58List最全总结( ArrayList, LinkedList, 匿名类) -
MapReduce,泛型,匿名内部类,Runnable和Callable
2019-07-27 02:51:57NULL 博文链接:https://pengqb.iteye.com/blog/738210 -
匿名类/内部类/本地类 解读
2015-07-10 11:08:27详细对比测试了匿名类/内部类/本地类之间的区别,有例子+博客对比说明,希望对大家有所帮助