A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

  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. }
复制代码


7 个回复

倒序浏览
哇,好高端的样子,看不懂,帮顶~~
回复 使用道具 举报
外部类访问内部类成员,要先建立内部类对象。
function()是静态方法,可以直接用类名调用,即Outer.function() ,function方法返回的又是内部类Inter的对象。可以理解为Outer.function()是内部类的对象,然后调用method方法。
Outer.function().method();其实是以下代码的简写:
  1. Outer.Inter in = new Outer().new Inter(); //创建内部类对象
  2. in.method();//调用内部类方法
复制代码
回复 使用道具 举报
首先分析 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;
复制代码

回复 使用道具 举报
没有名字的 Outer类 调用了 静态的function()方法 , 方法中返回一个实现Inner 接口的类,并调用该类中的 method()方法.
回复 使用道具 举报
Outer.function().method();

function( )返回一个匿名的Inter对象,因为覆写了method方法,实现了接口,所以接口Inter可以实例化,这个是匿名实现接口,但我认为不是内部类
回复 使用道具 举报
不管怎么说,接口Inter都是写在Outer外面的
回复 使用道具 举报
就是内部类实现了接口Inter。内部类放在静态方法里面被调用。这个是匿名内部类的基本格式把
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马