黑马程序员技术交流社区

标题: 在匿名内部类中对接口的方法复写为何前面要加public??? [打印本页]

作者: 々白点潜心ザ    时间: 2014-4-22 10:17
标题: 在匿名内部类中对接口的方法复写为何前面要加public???
本帖最后由 々白点潜心ザ 于 2014-4-22 14:47 编辑
  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("method run!");
  14.                         }
  15.                 };
  16.         }
  17. }

  18. class InnerClassDemo
  19. {
  20.         public static void main(String[] args)//前面为何一定要加public!!!
  21.         {
  22.                 Test.function().method();
  23.         }
  24. }
复制代码
小弟初学,求大神指点,谢了


作者: Mr.飞碍特    时间: 2014-4-22 10:28
对于类接口方法复写,如果不加上关键字public的话,会导致无法实现,正在尝试指定更低的访
问权限,接口中的方法隐含都是public和abstract的。所以在实现接口的类中,实现方法时都要在方法前加上“public”修饰符。
不过你这个标注的是主函数main()啊,Java指定了一些可访问的修饰符如:private、protected、public,任何方法或变量都可以声明为public,Java可以从该类之外的地方访问。因为main方法是公共的,JVM就可以轻松的访问执行它。
作者: 曲佳奇    时间: 2014-4-22 10:30
本帖最后由 曲佳奇 于 2014-4-22 10:34 编辑

接口中默认方法都是public 实现接口 必须重写里面的所有方法  重写要求 子类方法的权限比父类大或者相等 所以必须为public
至于你加备注的那句 public static void main 主函数格式啊 这个不能改的 要不会找不到程序入口

作者: ⒈心只霸占沵    时间: 2014-4-22 10:35
因为接口方法是简写格式
void method();//是简写格式  其实是public abstract void method();
作者: 王峰峰    时间: 2014-4-22 10:38
学习一下Main方法:
-->public:表示此方法可以被内部调用
-->static:表示此方法可以由类名直接调用
-->void:主方法是程序的起点,所以不需要任何的返回值
-->main:系统规定好默认调用的方法名称,执行时默认找到main方法名称
-->String args[]:表示是运行时报参数
不用public 修饰的话,虚拟机就无法找到它。
作者: 坏米饭    时间: 2014-4-22 11:28
void method();就是public abstract void method();
默认的格式,你不写他也有。
作者: idream    时间: 2014-4-22 11:36
这个问题涉及到两个知识点:
一:在interface中常见的成员,这些成员都有固定的修饰符
全局常量:public static final
抽象方法:public abstract
二:子类实现父类的接口时,覆盖其父类方法,子类的权限要打与父类的权限


作者: tacyjay在路上    时间: 2014-4-22 12:04
你的public标错地方了吧?看代码

  1. interface Inter
  2. {
  3.         void method();//其实这儿应该是:public abstract void method() 不写的话,会默认加上。
  4. }

  5. class Test
  6. {
  7.         static Inter function()
  8.         {
  9.                 return new Inter()
  10.                 {
  11.                         public void method()//前面为何一定要加public!!!  [color=Red]是这儿吧[/color]
  12.                         {
  13.                                 System.out.println("method run!");
  14.                         }
  15.                 };
  16.         }
  17. }

  18. class InnerClassDemo
  19. {
  20.         public static void main(String[] args)
  21.         {
  22.                 Test.function().method();
  23.         }
  24. }
复制代码


这个知识点,毕老师(见视频day0712)在讲接口的时候强调过。下面写出来:

接口定义时,格式特点:
  <1>接口中常见定义:常量,抽象方法。
  <2>接口中的成员都有固定修饰符(没有的话,系统会自动加上)
  常量:public static final
  方法:public abstract

作者: 々白点潜心ザ    时间: 2014-4-22 12:37
tacyjay在路上 发表于 2014-4-22 12:04
你的public标错地方了吧?看代码

额,,是的,,想起来了,谢谢咯




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