`
阿尔萨斯
  • 浏览: 4143258 次
社区版块
存档分类
最新评论

在接口后面能不能使用new操作符

 
阅读更多
<iframe align="center" marginwidth="0" marginheight="0" src="http://www.zealware.com/csdnblog336280.html" frameborder="0" width="336" scrolling="no" height="280"></iframe>
  这是一些新手问到一个问题,说是在接口后面能不能使用new操作符!
  这是一些语法基础知识,需要借助于工具才能快速提高。能与不能,直接写一个看看即可。
  看例子:

  public interface Humans{
  }
  如果我们手中没有Humans的具体实例类,又要在程序中用到一个。比如测试啊什么的!
  
  Object obj=new Humans(){};
  
  上面的语句是对的,其实不要认为接口能直接实例化了,注意后面还有"{}",这里其实new出来的是一个Humans的实现类,而在java内部,是一个匿名内部类。
  下面再看一个接口:
  interface Animal
  {
  void eat();
  }
  
  错误的形式(编译都通不过的):
  Animal a=new Animal(){};
  正确的形式:
  Animal a=new Animal()
  {
  public void eat(){
  System.out.println("吃东西了!");
  }
  };
  要直接在new后面跟接口名称来实例化一个接口是不可能的,还必须保证接口名称后面有完整的实现体。现在应该明白其实质了吧,我们new其实是操作在匿名内部类上的,不是用在接口本身上。接口本身是不能实例化的!
  在一些框架(如EasyJWeb)中,经常使用匿名内部类的方式来写回调实现,因为其语法比较简洁,也不会创建一些多余的没有独立能力的类。
  当然,作为一般的应用肯定很少用,这需要借助于开发工具。这些基础问题他都会提示你,何时对,何时错!



  这是一些新手问到一个问题,说是在接口后面能不能使用new操作符!
  这是一些语法基础知识,需要借助于工具才能快速提高。能与不能,直接写一个看看即可。
  看例子:

  public interface Humans{
  }
  如果我们手中没有Humans的具体实例类,又要在程序中用到一个。比如测试啊什么的!
  
  Object obj=new Humans(){};
  
  上面的语句是对的,其实不要认为接口能直接实例化了,注意后面还有"{}",这里其实new出来的是一个Humans的实现类,而在java内部,是一个匿名内部类。
  下面再看一个接口:
  interface Animal
  {
  void eat();
  }
  
  错误的形式(编译都通不过的):
  Animal a=new Animal(){};
  正确的形式:
  Animal a=new Animal()
  {
  public void eat(){
  System.out.println("吃东西了!");
  }
  };
  要直接在new后面跟接口名称来实例化一个接口是不可能的,还必须保证接口名称后面有完整的实现体。现在应该明白其实质了吧,我们new其实是操作在匿名内部类上的,不是用在接口本身上。接口本身是不能实例化的!
  在一些框架(如EasyJWeb)中,经常使用匿名内部类的方式来写回调实现,因为其语法比较简洁,也不会创建一些多余的没有独立能力的类。
  当然,作为一般的应用肯定很少用,这需要借助于开发工具。这些基础问题他都会提示你,何时对,何时错!



分享到:
评论

相关推荐

    java泛型总结.docx

    类型推断:在Java 7及以上版本中,可以使用varargs和钻石操作符来推断类型参数。例如,List[] lists = Arrays.asList(new List() {{ add("hello"); add("world"); }}); 泛型边界:可以使用泛型边界来限制类型参数的...

    【05-面向对象(下)】

    •局部内部类不能在外部类以外的地方使用,那么局部内部类也不能使用访问控制符和static修饰 匿名内部类 •匿名内部类适合创建那种只需要一次使用的类,定义匿名内部类的语法格式如下: •new 父类构造器...

    在一小时内学会 C#(txt版本)

    2. 你不能在 C# 中访问一个“挂起”指针。 3. 超出数组边界的表达式索引值同样不可访问。 4. C# 中没有全局变量或全局函数,取而代之的是通过静态函数和静态变量完成的。 数据类型 所有 C# 的类型都是从 object 类...

    LuaBind 源码 (Lua增强库)

    LuaBind被确认不能在 GCC 2.95.2 (SunOS 5.8) 下工作. Metrowerks 8.3 (Windows) 可以编译LuaBind,但是通不过常量测试.这就意味着常量 成员函数被视同非常量成员函数. 如果你测试了LuaBind和其他未列出的编译器的...

    C++入门到精通

    特殊的操作符 如赋值 下标 调用以及类特有的 new和 delete操作符 这一章还介绍了类 的友元 它对一个类具有特殊的访问特权 及其必要性 然后讨论用户定义的转换 包括底 层的概念和用法的扩展实例 这一章还详细讨论了...

    java 面试题 总结

    接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对象上调用接口的方法。由于有抽象类,它...

    入门学习Linux常用必会60个命令实例详解doc/txt

    在系统关机前使用 shutdown命令,系统管理员会通知所有登录的用户系统将要关闭,并且login指令会被冻结,即新的用户不能再登录。 halt 1.作用 halt命令的作用是关闭系统,它的使用权限是超级用户。 2.格式 halt...

    C# for CSDN 乱七八糟的看不懂

    } 每个 case 后面,必须有 break 或者 goto,不允许贯穿。 Goto goto 语句将程序控制直接传递给标记语句。 for (int i = 0; i ; i++) for (int j = 0; j ; j++) if (myArray[i,j].Equals(myNumber)) goto Found; ...

    grub4dos-V0.4.6a-2017-02-04更新

    解决了 chainloader --raw 不能加载硬盘 BPB hidden sectors=0 的引导扇区的问题。也是英文论坛报告的。 3.清除 ud 启动后残留信息使后续启动不再被重复识别为 ud 启动(因为后续启动本来就不再是从 ud 启动)。 ...

    Visual C++ 2010入门经典(第5版)--源代码及课后练习答案

    4.3.2 new和delete操作符 168 4.3.3 为数组动态分配内存 169 4.3.4 多维数组的动态分配 171 4.4 使用引用 172 4.4.1 引用的概念 172 4.4.2 声明并初始化lvalue引用 172 4.4.3 声明并初始化rvalue引用 173 ...

    Visual C++ 2005入门经典--源代码及课后练习答案

    他曾在IBM工作多年,能使用多种语言进行编程(在多种机器上使用汇编语言和高级语言),设计和实现了实时闭环工业控制系统。Horton拥有丰富的教学经验(教学内容包括C、C++、Fortran、PL/1、APL等),同时还是机械、加工...

    CISCO 技术大集合

    路由器处于RXBOOT状态,在开机后60秒内按ctrl-break可进入此状态,这时路由器不能完成正常的功能,只能进行软件升级和手工引导。 6. 设置对话状态 这是一台新路由器开机时自动进入的状态,在特权命令状态使用SETUP...

    【。net 专业】 面试题

    (4) M不能使最后一个也不能是倒数第二个字母 (5) K出现,则N就一定出现 (6) O如果是最后一个字母,则L一定出现 问题一:下列哪一个字母可以放在LO中的O后面,形成一个3个字母的密码单词? A) K B)L C) M D) N ...

    PHP 面向对象技术(全面讲解).txt

    使用一个关键字class 和后面加上一个你想要的类名以及加上一对大括号, 这样一个类的结构 就定义出来了,只要在里面写代码就可以了,但是里面写什么?能写什么?怎样写才是一个完整的 类呢?上面讲过来,使用类是...

    乐优商城.xmind

    通过 @PathVariable 可以将 URL 中占位符参数绑定到控制器处理方法的入参中:URL 中的 {xxx} 占位符可以通过@PathVariable(“xxx“) 绑定到操作方法的入参中。 select * from tb_category where id in (select ...

    HGE_系列教材(1-9)

    这类函数都是以System_ 开头,后面加上表示函数意义的单词(不出现下划线), 之后介绍的函数也将使用这种命名方式,即类型前缀+ 有意义的单词: System_Initiate 初始化相关软件和硬件 System_Shutdown 恢复声音...

    springmybatis

    在User.xml 的配置文件中,mapper namespace="com.yihaomen.mybatis.inter.IUserOperation" ,命名空间非常重要,不能有错,必须与我们定义的package 和 接口一致。 运行这个测试程序,就可以看到结果了。 除非...

    网管教程 从入门到精通软件篇.txt

    如果不能在启动目录(默认为 %systemroot%System32)中找到该文件,将试着在 Windows 安装 CD 中找到它。如果有多引导系统的计算机,必须保证是在包含 Windows 的驱动器上使用该命令。 Diskpart  创建和删除硬盘...

    java基础入门教程

    Java 语 言 能 在 执 行 码 (二 进 制 码 )上 兼 容 ,这 样 以 前 所开 发 的软 件 就 能 运行 在 不 同 的 机 器 上 ,只 要 所 用 的 机 器 能 提供 Java 语 言 解 释 器 即可 。 Java 语 言 将 对 未 来 软 件 ...

Global site tag (gtag.js) - Google Analytics