黑马程序员技术交流社区

标题: 匿名内部类中一点点疑问 [打印本页]

作者: 小子考驾照    时间: 2014-8-29 01:10
标题: 匿名内部类中一点点疑问
毕老师讲的匿名内部类时的例子中有一点不懂,红色字体部分
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()方法要静态吧
        }
}
作者: 谢建平    时间: 2014-8-29 01:14
  就比如一个static 方法里面的变量不用都加static 一个道理
作者: careit    时间: 2014-8-29 08:51
  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.                 };
复制代码



打完收工
作者: 范靖明    时间: 2014-8-29 09:15
感觉在静态方法里的一些方法,不写satatic 应该可以




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