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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 高鑫 中级黑马   /  2012-5-10 12:32  /  1815 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. interface Inter
  2. {
  3.         void method();
  4. }
  5. class Test
  6. {       
  7.         static Inter function()
  8.         {
  9.                 return new Inter()
  10.                  {
  11.                         public  void method()
  12.                         {
  13.                                  System.out.println("yunxing");
  14.                          }       
  15.                 };
  16.         }
  17. }
  18. class Demo
  19. {
  20.         public static void main(String args[])
  21.         {
  22.             Test.function().method();
  23.    }
  24. }
复制代码
问题,为什么11行必须加public,覆盖不是权限等于或大于就行吗,11行的void method()和第3行的void method()
        不是权限一样的吗,都是void,为什么不加public就错了呢??

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1 接口省略了public 亲

查看全部评分

6 个回复

正序浏览
陈忠 中级黑马 2012-5-11 01:55:24
7#
你的问题里就出现了一个错误。void说的是无返回类型。即相当于系统默认的帮你加了一个无返回值的return;而不是修饰权限。
忽略这个, 你问题的答案上面一有了正解。
即接口中的方法都并需要被修饰为 public static。即使你写代码是没有写。系统依然会默认的帮你加上。所以在实现类的方法中
复写此方法时必须要加上public关键字
回复 使用道具 举报
老贠如是说:接口省略了public 亲
回复 使用道具 举报
因为Inter是一个接口,既然是接口那么它的成员就具有以下特点:
1、只有成员变量和成员方法。
2、成员变量 默认修饰符 public static final。                       
3、成员方法 默认修饰符 public abstract。比如:void show();其实就是public abstract void show();                       
                建议:自己手动加上修饰符。
因为return new Inter(){};这代码即是要返回实现Inter接口的一个类匿名对象,所以Test类里面的匿名类重写Inter类的method()方法自然要加上public。
为了避免这种错误一般在写接口的时候都会把这些默认修饰符加上。
回复 使用道具 举报
因为Inter是一个接口,既然是接口那么它的成员就具有以下特点:
1、只有成员变量和成员方法。
2、成员变量 默认修饰符 public static final。                       
3、成员方法 默认修饰符 public abstract。比如:void show();其实就是public abstract void show();                       
                建议:自己手动加上修饰符。
因为return new Inter(){};这代码即是要返回实现Inter接口的一个类匿名对象,所以Test类里面的匿名类重写Inter类的method()方法自然要加上public。
为了避免这种错误一般在写接口的时候都会把这些默认修饰符加上。
回复 使用道具 举报
new Inne
{
                        public  void method()
                        {
                                 System.out.println("yunxing");      //相当于是Inner的子类实现了自己的方法,
                         }        
                };

1、 相当于是Inner的子类实现了自己的方法,
2、 接口中的方法默认的都是 public abstract
3、 子类重写的方法的访问权限不能低于基类的权限,所以只能是public

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
你可知道接口中定义的方法都是用public abstract修饰的即使没有加修饰符 还是默认的public abstract 现在你在想一下

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马