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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 小子考驾照 中级黑马   /  2014-8-29 01:10  /  1037 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

毕老师讲的匿名内部类时的例子中有一点不懂,红色字体部分
interface Inter
{
        public abstract void show();
}
class Test
{
        /*
        public static class Int implements Inter
        {
                public void show()//就是这一句,为啥不加静态呢
                {
                        System.out.println("我是***,我想进入黑马程序员训练营学习");
                }
        }
        */
        public static Inter function()
        {
                return new Inter()
                {
                        public void show()
                        {
                                System.out.println("我是***,我想进入黑马程序员训练营学习");
                        }
                };
        }
}
class InterTest
{
        public static void main(String[] args)
        {
                Test.function().show();//这一句中调用了show(),show()方法要静态吧
        }
}

3 个回复

正序浏览
感觉在静态方法里的一些方法,不写satatic 应该可以
回复 使用道具 举报
  1. public class InterTest
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 Test.function().show();//这一句中调用了show(),show()方法要静态吧
  6.         }
  7. }
  8. interface Inter
  9. {
  10.         public abstract  void show();
  11. }
  12. class Test
  13. {
  14.         
  15.         public static class Int implements Inter
  16.         {
  17.                 public  void show()//就是这一句,为啥不加静态呢
  18.                 {
  19.                         System.out.println("1  我是***,我想进入黑马程序员训练营学习");
  20.                 }
  21.         }
  22.         
  23.         public static Inter function()
  24.         {
  25.                 return new Inter()
  26.                 {
  27.                         public void show()
  28.                         {
  29.                                 System.out.println("2  我是***,我想进入黑马程序员训练营学习");
  30.                         }
  31.                 };
  32.         }
  33. }
复制代码

1:  public void show()//就是这一句,为啥不加静态呢
如果加上的话,从报错日志就可以看出问题来
This static method cannot hide the instance method from Inter
意思是:这个静态方法不能隐藏Inter的实例方法
2:Test.function().show();//这一句中调用了show(),show()方法要静态吧
首先咱把两个输出加上1 和 2 来区别,不然不知道执行那个
  1. System.out.println("2  我是***,我想进入黑马程序员训练营学习");
复制代码

运行结果为
  1. 2  我是***,我想进入黑马程序员训练营学习
复制代码

也就是执行了下边的show 方法:
分析如下: Test.function().show() 等效于
Inter i=Test.function();
i.show();
而i指向的是如下代码返回的地址
  1. return new Inter()
  2.                 {
  3.                         public void show()
  4.                         {
  5.                                 System.out.println("2  我是***,我想进入黑马程序员训练营学习");
  6.                         }
  7.                 };
复制代码



打完收工
回复 使用道具 举报
  就比如一个static 方法里面的变量不用都加static 一个道理
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马