匿名类可以让代码更加简洁,因为它允许声明的同时实例化一个类。类似于局部类,只不过他们没有名字,当只需要一次局部类时,用匿名类更简洁。
局部类的声明是类的声明,但匿名类的声明是一个表达式。下面的例子中,frenchGreeting
和spanishGreeting
的初始化使用了匿名类,而englishGreeting
的初始化使用了局部类。
public class HelloWorldAnonymousClasses { interface HelloWorld { public void greet(); public void greetSomeone(String someone); } public void sayHello() { class EnglishGreeting implements HelloWorld { String name = "world"; public void greet() { greetSomeone("world"); } public void greetSomeone(String someone) { name = someone; System.out.println("Hello " + name); } } HelloWorld englishGreeting = new EnglishGreeting(); HelloWorld frenchGreeting = new HelloWorld() { String name = "tout le monde"; public void greet() { greetSomeone("tout le monde"); } public void greetSomeone(String someone) { name = someone; System.out.println("Salut " + name); } }; HelloWorld spanishGreeting = new HelloWorld() { String name = "mundo"; public void greet() { greetSomeone("mundo"); } public void greetSomeone(String someone) { name = someone; System.out.println("Hola, " + name); } }; englishGreeting.greet(); frenchGreeting.greetSomeone("Fred"); spanishGreeting.greet(); } public static void main(String... args) { HelloWorldAnonymousClasses myApp = new HelloWorldAnonymousClasses(); myApp.sayHello(); } }
Syntax of Anonymous Classes
As mentioned previously, an anonymous class is an expression. The syntax of an anonymous class expression is like the invocation of a constructor, except that there is a class definition contained in a block of code.
匿名类是一个表达式,它的语法类似于构造方法的调用,加上代码块中类的定义。
HelloWorld frenchGreeting = new HelloWorld() { String name = "tout le monde"; public void greet() { greetSomeone("tout le monde"); } public void greetSomeone(String someone) { name = someone; System.out.println("Salut " + name); } };
匿名类的定义包括:
String name = "tout le monde";
好像又是,此处有疑问匿名类访问外部变量的规则(和局部类相同):
final
或effectively final时匿名类才能访问它匿名类定义成员的规则(和局部类相同):
能在匿名类中定义的有:
不能在匿名类中定义构造方法。
摘要: 今天给各位分享动物疫苗间隔多久打一次的知识,其中也会对动物疫苗打几次进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!本文目录一览:1、狗狗要隔多久打一次疫苗.
摘要: 大家好,今天小编关注到一个比较有意思的话题,就是关于宠物粮食店一年利润怎么样啊知乎文章的问题,于是小编就整理了4个相关介绍宠物粮食店一年利润怎么样啊知乎文章的解答,让我们一起看看吧
这一次的节点更新覆盖了欧洲、新加坡、香港、美国、加拿大、日本、韩国等地区,最高速度可达22.3 M/S。只需复制下方的Clash/v2ray订阅链接,在客户端添加后即可正常使用。
摘要: 大家好,今天小编关注到一个比较有意思的话题,就是关于小型饲料颗粒机500元1时能产多少公斤的问题,于是小编就整理了3个相关介绍小型饲料颗粒机500元1时能产多少公斤的解答,让我们一
修改项目默认node_modules路径 npm install --global xxx 属于全局安装npm install xxx 属于本地安装1、全局路径Windows下的Nodejs npm路
摘要: 今天给各位分享领养孩子协议书需要公证吗怎么写的知识,其中也会对领养孩子的协议书样本进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!本文目录一览:1、领养孩子.
这一次的节点更新覆盖了美国、韩国、新加坡、加拿大、香港、欧洲、日本等地区,最高速度可达21.3 M/S。只需复制下方的Clash/v2ray订阅链接,在客户端添加后即可正常使用。
摘要: 今天给各位分享重庆猫领养的知识,其中也会对重庆猫网领养进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!本文目录一览:1、重庆江津区猫领养中心地址...
这一次的节点更新覆盖了加拿大、新加坡、韩国、美国、香港、欧洲、日本等地区,最高速度可达18.9 M/S。只需复制下方的Clash/v2ray订阅链接,在客户端添加后即可正常使用。
摘要: 今天给各位分享新手小白怎么开宠物店的知识,其中也会对开宠物店的利润和风险进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!本文目录一览:1、新手怎么开宠物店?.