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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 杨天皓 中级黑马   /  2012-6-1 22:13  /  2583 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 杨天皓 于 2012-6-3 14:56 编辑


  1. interface Contents
  2. {
  3.         int value();
  4. }



  5. class Parce
  6. {
  7.         public Contents contents()
  8.         {
  9.                 return new Contents()
  10.                 {
  11.                         private int i = 11;
  12.                         public int value()
  13.                         {
  14.                                 return i;
  15.                         }
  16.                 };
  17.         }
  18.         public static void main(String[] args)
  19.         {
  20.                 Parce p = new Parce();
  21.                 Contents c = p.contents();
  22.                         
  23.         }


  24. }
复制代码
想问下,匿名内部类中的方法为什么一定要声明为public,用默认修饰,和private都会报错。

评分

参与人数 1技术分 +1 收起 理由
袁錦泰 + 1

查看全部评分

8 个回复

倒序浏览
因为上面interface这个接口。。interface里面的方法必须全部是抽象方法,默认为public
回复 使用道具 举报
这个其实不是因为public int value()这个方法是放在匿名内部类里面,而是因为上面interface接口的原因。
interface里面的方法必须全部是抽象方法,默认为public 。
然后你实现了接口,就是你写了int value();这个方法
之后,你下面要重写这个方法,所以必须把public明确写出来,如果你没实现那个接口的话,内部类方法不是public的也是可以的,你试试~

评分

参与人数 1技术分 +1 收起 理由
袁錦泰 + 1 赞一个!

查看全部评分

回复 使用道具 举报
我补充第一个人一点,接口里面的方法实例化时,实例化的方法必须要比接口里面的权限高

评分

参与人数 1黑马币 +5 收起 理由
黄奕豪 + 5 这个是重点~~

查看全部评分

回复 使用道具 举报
匿名内部类是建立在继承一个类或实现一个接口的基础上的。而子类重写父类的方法必须保证子类权限大于等于父类权限,否则编译失败。而接口的方法默认就是public的,所以你只能是public了
回复 使用道具 举报
总结如下:
一、接口中声明的属性默认都是public static final的,也只能是public static final的,但却可以省略;
所有的方法都是被public abstract 修饰的,但却也可以省略。
二、子类在实现接口时必须覆盖接口中必须覆盖接口的方法,原则就包括子类权限大于等于父类权限。
回复 使用道具 举报
分享覆盖方法必须满足的十大原则
一:子类方法的名称、参数签名和返回类型必须与父类方法的名称、参数签名和返回类型一致

二:子类方法不能缩小父类方法的访问权限

三:子类方法不能抛出比父类方法更多的异常,子类方法抛出的异常必须和父类

方法抛出的异常相同,或者子类方法抛出的异常类是父类方法抛出的异常类的子类

四:方法覆盖只存在于子类和父类(包括直接父类和间接父类)之间。在同一个类中方法只能被重载,不能被覆盖。

五:父类的静态方法不能被子类覆盖为非静态方法。

六:子类可以定义与父类的静态方法同名的静态方法,以便在子类中隐藏父类的

静态方法。子类隐藏父类的静态方法和子类覆盖父类的实例方法,这两者的区别

在于:运行时,Java虚拟机把静态方法和所属的类绑定,而把实例方法和所属的
实例绑定。
七:父类的非静态方法不能被子类覆盖为静态方法。
八:父类的私有方法不能被子类覆盖
九:父类的抽象方法可以被子类通过两种途径覆盖:一是子类实现父类的抽象方法;二是子类重新声明父类的抽象方法。
十:父类的非抽象方法可以被覆盖为抽象方法。

评分

参与人数 1技术分 +1 收起 理由
袁錦泰 + 1

查看全部评分

回复 使用道具 举报
谢谢各位,现在已经弄明白了
回复 使用道具 举报
因为接口中成员都有默认固定修饰符.
    常量:public static final
    方法:public abstract
而在覆盖的时候,权限必须要大于等于public
所以不能被private权限覆盖
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马