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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 章闽 中级黑马   /  2012-10-16 21:24  /  1764 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

interface Contents
{
        void go(){};
}

public class Test1 {
        public Contents con()
        {
                return new Contents()
                {
                        public void go()
                        {
                                System.out.println("I got it");
                        }
                };
        }
       
        public static void main(String [] args)
        {
                Test1 t = new Test1();
                Contents c = t.con();
                c.go();
        }

我想问下此处匿名内部类中的go()方法为什么一定要写明是public的(不然不能运行),难道匿名内部类内部成员默认是private?

评分

参与人数 1技术分 +1 收起 理由
唐志兵 + 1 赞一个!

查看全部评分

9 个回复

倒序浏览
因为接口中的方法默认都是public
回复 使用道具 举报
interface Contents
{
         void go(){};
}
这个接口里的抽象方法怎么能写方法体呢?
回复 使用道具 举报
首先你定义的接口



interface Contents
{
         void go(){};
}
是不能有方法主体,要把void go(){};改成void go();
因为你定义的接口,定义接口的时候接口的方法默认的全是抽象方法且都是pulib权限
你在复写的时候要保持权限一致,不然就会提醒“不能降低自 Contents 继承的方法的可视性”所以要public权限

评分

参与人数 1技术分 +1 收起 理由
唐志兵 + 1 赞一个!

查看全部评分

回复 使用道具 举报
魏亮 来自手机 中级黑马 2012-10-16 21:39:05
报纸
不是全部内部类都要写public,而是你的代码里实现的是接口,接口的方法前都有public来自: Android客户端
回复 使用道具 举报
完整的
interface Contents
{
     public abstract void go();// 接口中的成员都是public,在覆盖抽象方法也应为public
}

评分

参与人数 1技术分 +1 收起 理由
唐志兵 + 1 赞一个!

查看全部评分

回复 使用道具 举报
丁旭 中级黑马 2012-10-16 21:45:40
7#
interface Contents
{
         void go(){};
}
这个接口里的成员是public的,实现类中的重写方法也必须是public的,访问权限不能比接口中的小

评分

参与人数 1技术分 +1 收起 理由
唐志兵 + 1 赞一个!

查看全部评分

回复 使用道具 举报
接口中的方法都是默认public abstract的 ,新建的匿名内部类其实是接口的子类对象的实例化,要重写接口中的访问方法,就必须要保证重写的方法权限不小于接口(父类)的权限才行,否则编译不通过...

评分

参与人数 1技术分 +1 收起 理由
唐志兵 + 1 赞一个!

查看全部评分

回复 使用道具 举报
王虎 中级黑马 2012-10-16 22:26:18
9#
接口中的所有方法默认的修饰符是  public abstract  
子类或实现类在重写时权限不得超过父类或接口,这是JAVA中的规定
回复 使用道具 举报
邹海洋 来自手机 中级黑马 2012-10-17 02:32:05
10#
1.
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马