黑马程序员技术交流社区

标题: 看到匿名内部类看不懂了,求帮忙解释 [打印本页]

作者: 王骥    时间: 2015-6-15 23:06
标题: 看到匿名内部类看不懂了,求帮忙解释
  1. class InnerDemo{
  2.         public static void main(String[] args){
  3.                 Outer.function().method();//看不懂
  4.         }
  5. }
  6. interface Inter
  7. {
  8.         public abstract void method();
  9. }
  10. class Outer
  11. {
  12.         //还是看不懂
  13.         public static Inter function(){
  14.                 return new Inter(){
  15.                         public void method(){
  16.                                 System.out.println("匿名内部类");
  17.                         }
  18.                 };
  19.         }
  20. }
复制代码



作者: 小黑啊    时间: 2015-6-15 23:12
哇,好高端的样子,看不懂,帮顶~~
作者: YQC2015    时间: 2015-6-16 00:05
外部类访问内部类成员,要先建立内部类对象。
function()是静态方法,可以直接用类名调用,即Outer.function() ,function方法返回的又是内部类Inter的对象。可以理解为Outer.function()是内部类的对象,然后调用method方法。
Outer.function().method();其实是以下代码的简写:
  1. Outer.Inter in = new Outer().new Inter(); //创建内部类对象
  2. in.method();//调用内部类方法
复制代码

作者: qian0217wei    时间: 2015-6-16 00:24
首先分析 Outer.function()证明function是一个静态方法,Outer.function().method();这里牵涉到链式调用可以肯定的function()返回的是一个可以调用method()的对象所以返回的是Inner对象!代码就是上面写的那样,理解匿名内部类的本质,就可以了!这样写可能好理解点
  1. Inner in =new Inner(){
  2. public void method()
  3. {
  4. System.out.println("hello method");
  5. }
  6. };//这就是接口多态,接口引用指向了子类实现的对象
  7. return in;
复制代码


作者: ARD    时间: 2015-6-16 01:20
没有名字的 Outer类 调用了 静态的function()方法 , 方法中返回一个实现Inner 接口的类,并调用该类中的 method()方法.
作者: zlpiano    时间: 2015-6-16 17:20
Outer.function().method();

function( )返回一个匿名的Inter对象,因为覆写了method方法,实现了接口,所以接口Inter可以实例化,这个是匿名实现接口,但我认为不是内部类
作者: zlpiano    时间: 2015-6-16 17:22
不管怎么说,接口Inter都是写在Outer外面的
作者: 一口老郭    时间: 2015-6-16 17:29
就是内部类实现了接口Inter。内部类放在静态方法里面被调用。这个是匿名内部类的基本格式把




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2