java 直接new接口的用法

java中的匿名类有一个倍儿神奇的用法,见下面代码示例:

1 package contract;
2 
3 public interface ISay {4     void sayHello();5 }

上面是一个简单的接口,下面是如何使用:

 1 package jimmy; 
 2 import contract.ISay; 
 3 public class Program { 
 4     public static void main(String[] args) { 
 5         ISay say = new ISay() {          
 6             public void sayHello() { 
 7                 System.out.println("Hello java!"); 
 8             } 
 9         };
 10     }
 11 }

初看上去,就好象在“不提供接口实现的情况下,直接new了一个接口实例”,对于C#er来说,有一种尽毁三观的赶脚。

还好这只是假象,观察bin目录下的class输出,会发现有一个类似Program1.class的文件,如果反编译观察一下,发现原来是编译器自动生成一个类Program1:

 1 package jimmy; 
 2  
 3 import contract.ISay; 
 4 import java.io.PrintStream; 
 5  
 6 class Program$1 
 7   implements ISay 
 8 { 
 9   public void sayHello()
 10   {
 11     System.out.println("Hello java!");
 12   }
 13 }

如果有些场合,只需要临时需要创建一个接口的实现类,上面的"技巧"可以用来简化代码.

java:使用匿名类直接new接口

时间: 2024-10-29 10:46:16

java 直接new接口的用法的相关文章

java中list接口的用法

list为继承自collection接口的接口,list里存储的值的类型通过list<object>泛型来声明:存值时调用ArrayList类的add方法,删除时调用用remove方法.list的很多方法与set很相似,但在存储结构上有区别,set的存储特点为无序和互异,相反的,list的存储特点为有序和存异. package test_list; import java.util.ArrayList; import java.util.HashSet; import java.util.It

java中set接口的用法

java中的set接口有如下的特点: 不允许出现重复元素: 集合中的元素位置无顺序: 有且只有一个值为null的元素. 因为java中的set接口模仿了数学上的set抽象,所以,对应的数学上set的特性为: 互异性:一个集合中,任何两个元素都认为是不相同的,即每个元素只能出现一次. 无序性:一个集合中,每个元素的地位都是相同的,元素之间是无序的.集合上可以定义序关系,定义了序关系后,元素之间就可以按照序关系排序.但就集合本身的特性而言,元素之间没有必然的序. 空集的性质:空集是一切集合的子集 S

Java中Enumeration接口的用法

Enumeration是java.util中的一个接口类,在Enumeration中封装了有关枚举数据集合的方法,与Iterator差不多,用来遍历集合中的元素  但是枚举Enumeration只提供了遍历Vector和Hashtable类型集合元素的功能,这种类型的集合对象通过调用elements()方法获取一个Enumeration对象  然后Enumeratino对象再调用以下方法来对集合中的元素进行遍历. hasMoreElements():判断Enumeration对象中是否还有数据

Java中Collection接口的用法

Collection接口是List.Set.Queue接口的父接口Collection接口定义了可用于操作List.Set和Queue的方法--增删改查List接口及其实现类--ArrayListList是元素有序并且可以重复的集合,被称为序列.List可以精确的控制每个元素的插入位置,或删除某个位置元素List有add()插入方法和get()获取方法ArrayList--数组序列,是List的一个重要实现类ArrayList底层是由数组实现的,这也是其名字的由来 List接口 List中的元素

java----数据结构与算法----JavaAPI:java.util.List接口

java.util.List接口 /** * @author lxrm * @date 20170307 * @description 本程序讲述java.util.List接口的用法 * java.util.List * 概述: * 1)List接口是Collection接口的子接口,所以List接口拥有Collection接口所定义的所有成员函数 * 除了有其父接口Collection中所定义的所有函数之外,List接口也添加了自己的函数,使得List集合拥有自己的特色 * List接口中新

Java语言Socket接口用法详解

Socket接口用法详解   在Java中,基于TCP协议实现网络通信的类有两个,在客户端的Socket类和在服务器端的ServerSocket类,ServerSocket类的功能是建立一个Server,并通过accept()方法随时监听客户端的连接请求. 扩展: ServerSocket中常用的构造函数及方法 构造函数:ServerSocket(int port) 这是一个构造方法,用于在当前的服务器默认的IP地址上监听一个指定的端口,即在指定的IP和端口创建一个ServerSocket对象

JavaSE入门学习21:Java面向对象之接口(interface)(二)

一接口实现的多态 在上一篇博文:JavaSE入门学习20:Java面向对象之接口(interface)(一)中提到了接口的实现存在多态性,那么 这一篇主要就要分析接口实现的多态. 实例一 Test.java源文件代码: public class Test{ public static void main(String[] args){ //实现接口Singer Singer s1 = new Student("Amy"); s1.sing(); s1.sleep(); s1.study

JDBC(Java Data Base Connectivity)基本用法

一.什么是JDBC JDBC(Java Database Connection)为java开发者使用数据库提供了统一的编程接口,它由一组java类和接口组成.是java程序与数据库系统通信的标准APl. JDBC API使得开发人员可以使用纯 java 的方式来连接数据库,并执行操作. sun公司由于不知道各个主流商用数据库的程序代码,因此无法自己写代码连接各个数据库.因此,sun公司决定自己提供一套api,凡是数据库想与Java进行连接的,数据库厂商自己必须实现JDBC这套接口.而数据库厂商的

Java EE学习--Quartz基本用法

新浪博客完全不适合写技术类文章.本来是想找一个技术性的博客发发自己最近学的东西,发现博客园起源于咱江苏,一个非常质朴的网站,行,咱要养成好习惯,以后没事多总结总结经验吧.很多时候都在网上搜索别人的总结,我自己也总结些东西,或许多多少少能帮得上别人. 首先提到的是Quartz,一个开源的定期执行计划任务的框架.其实我内心好奇这个框架很久了,像那些能定时修改数据库数据,定时分配任务的功能一直觉得很神奇.心动不如行动,今天我就小小的学习了一下用法,力求言简意赅,大家都懂的我就不说了. 第一步:下载Qu