Java匿名内部类的写法示例
前言
在Java中调用某个方法时,如果该方法的参数是一个接口类型,除了可以传入一个参数接口实现类,还可以使用匿名内部类实现接口来作为该方法的参数。
匿名内部类其实就是没有名称的内部类,在调用包含有接口类型参数的方法时,通常为零简化代码,不会创建一个接口的实现类作为方法参数传入,而是直接通过匿名内部类的形式传入一个接口类型参数,在匿名内部类中直接完成方法的实现。
创建匿名内部类的基本语法格式如下:
new 父接口(){
//匿名内部类实现部分
}
示例
interface Animal{ void shout(); } public class Example21 { public static void main(String[] args) { String name="小花"; //定义匿名内部类作为参数传递给animalShout方法 animalShout(new Animal() { //实现shout()方法 public void shout() { //jdk8开始,局部内部类、匿名内部类课堂访问非final的局部变量 System.out.println(name+"喵喵。。。"); } }); } //定义静态方法animalShout(),接收接口类型参数 public static void animalShout(Animal an) { an.shout();//调入传入对象an的shout()方法 } }
注意:
在调用animalShout()方法时,在方法的参数位置上写上new Animal(){},这相当于创建了一个实例对象,并将对象作为参数传给animalShout()方法。在new Animal()后面有一对大括号表示创建的对象为Animal的子类实例,该子类是匿名的
总结
到此这篇关于Java匿名内部类的文章就介绍到这了,更多相关Java匿名内部类内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!
相关推荐
-
java 内部类(匿名类,匿名对象,静态内部类)详解及实例
内部类的介绍 定义在另外一个类中的类,叫内部类 成员内部类 1..new 创建成员内部类必须先创建外部类的实例,然后通过.new 创建内部类的对象 2..this 可以通过外部类的类名.this去访问外部类的所有属性和方法. public class Test1 { String name = "asnd"; public static void main(String[] args) { Test1 test1 = new Test1(); Inner mInner = test1.
-
java匿名内部类实例简析
匿名类是不能有名称的类,所以没办法引用它们.必须在创建时,作为new语句的一部分来声明它们.这就要采用另一种形式的new语句,如下所示: new <类或接口> <类的主体> 这种形式的new语句声明一个新的匿名类,它对一个给定的类进行扩展,或者实现一个给定的接口.它还创建那个类的一个新实例,并把它作为语句的结果而返回.要扩展的类和要实现的接口是new语句的操作数,后跟匿名类的主体.如果匿名类对另一个类进行扩展,它的主体可以访问类的成员.覆盖它的方法等等,这和其他任何标准的类都是一样
-
java中匿名内部类详解
java匿名内部类: 1:匿名内部类,匿名内部类也就是没有名字的内部类. 2:匿名内部类的作用 正因为没有名字,所以匿名内部类只能使用一次,它通常用来简化代码编写. 3:匿名内部类的实现 匿名内部类的两种实现方式:第一种,继承一个类,重写其方法:第二种,实现一个接口(可以是多个),实现其方法. 4:匿名内部类的创建 匿名类是不能有名称的类,所以没办法引用它们.必须在创建时,作为new语句的一部分来声明它们. package com.mianshi.test; /** * 类名称:Anonymou
-
在java中 利用匿名内部类进行较简洁的双括弧初始化的方法
java的collection集合框架如set.map.list没有提供任何简便的方法供初始化.而每次建立集合都要将值一个个add进去.如 复制代码 代码如下: Set<Character> letter=new HashSet<Character>();letter.add('a');letter.add('b');//... 非常繁琐. 但用匿名内部类的话.可以略为简便些. 复制代码 代码如下: Set<Character> letter=new HashSet&l
-
简单谈谈java中匿名内部类构造函数
先看看下面的代码能不能编译通过: public static void main(String[] args) { List l1 = new ArrayList(); List l2 = new ArrayList(){}; List l3 = new ArrayList(){{}}; System.out.println(l1.getClass() == l2.getClass() ); System.out.println(l2.getClass() == l3.getClass() );
-
全面了解Java中的内部类和匿名类
Java内部类(Inner Class),类似的概念在C++里也有,那就是嵌套类(Nested Class),乍看上去内部类似乎有些多余,它的用处对于初学者来说可能并不是那么显著,但是随着对它的深入了解,你会发现Java的设计者在内部类身上的确是用心良苦.学会使用内部类,是掌握Java高级编程的一部分,它可以让你更优雅地设计你的程序结构.下面从以下几个方面来介绍: 第一次见面 public interface Contents { int value(); } public interface
-
java中的匿名内部类详细总结
匿名内部类也就是没有名字的内部类 正因为没有名字,所以匿名内部类只能使用一次,它通常用来简化代码编写 但使用匿名内部类还有个前提条件:必须继承一个父类或实现一个接口 实例1:不使用匿名内部类来实现抽象方法 复制代码 代码如下: abstract class Person { public abstract void eat(); } class Child extends Person { public void eat() { System.out.printl
-
老生常谈 java匿名内部类
匿名内部类: 1.匿名内部类其实就是内部类的简写格式. 2.定义匿名内部类的前提: 内部类必须是继承一个类或者实现接口. 3.匿名内部类的格式: new 父类或者接口(){定义子类的内容} 4.其实匿名内部类就是一个匿名子类对象.而且这个对象有点胖. 可以理解为带内容的对象. 5.匿名内部类中定义的方法最好不要超过3个. abstract class AbsDemo { abstract void show(); } class Outer { int x = 3; /* class I
-
Java中的匿名内部类小结
java内部类分为: 成员内部类.静态嵌套类.方法内部类.匿名内部类 . 在java的世界里,提供了匿名内部类语法,用于帮助大家简化代码,本文简要从接口,抽象类以及常规类以代码的形式描述其常用模式. 1. 接口模式 public interface IWriter { void write(); } public static void main(String[] args) { IWriter writer = new IWriter() { @Override public void wri
-
Java匿名对象与匿名内部类
匿名对象:没有名字的对象. 非匿名对象: ClassName c=new ClassName(); c.run(); 匿名对象: new ClassName().run(); 注意事项: 1.当对象对方法仅进行一次调用的时候,就可以简化成匿名对象. 2.两个匿名对象不可能是同一个对象. 3.一般不给匿名对象赋予属性值,因为永远无法获取到. 4.运行一次,直接就被回收掉了,节省内存空间. 匿名对象使用的代码例子: public class Anony{ int a=1; int b=2; void
随机推荐
- javascript onkeydown,onkeyup,onkeypress,onclick,ondblclick
- php Ubb代码编辑器函数代码
- python制作爬虫爬取京东商品评论教程
- set rs=server.CreateObject("adodb.recordset") 的中文详细说明
- C++开发在IOS环境下运行的LRUCache缓存功能
- c++实现跳跃表(Skip List)的方法示例
- MySQL 索引分析和优化
- 深入探讨:MySQL数据库MyISAM与InnoDB存储引擎的比较
- PHP实现向关联数组指定的Key之前插入元素的方法
- 解析WordPress中控制用户登陆和判断用户登陆的PHP函数
- PowerShell函数用Hash表传参实例
- 微信小程序 欢迎页面的制作(源码下载)
- php mysql数据库操作分页类
- jQuery中的each()详细介绍(推荐)
- jQuery鼠标事件总结
- javascript实现点击后变换按钮显示文字的方法
- javascript实现日期格式转换
- 用Sygate轻松实现共享上网
- 详解Java中使用externds关键字继承类的用法
- 详解Spring Boot 配置多个RabbitMQ