黑马程序员技术交流社区

标题: 匿名内部类,求解 [打印本页]

作者: 章闽    时间: 2012-10-16 21:24
标题: 匿名内部类,求解
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?
作者: 李润根    时间: 2012-10-16 21:33
因为接口中的方法默认都是public
作者: 丁旭    时间: 2012-10-16 21:33
interface Contents
{
         void go(){};
}
这个接口里的抽象方法怎么能写方法体呢?
作者: 沈佳龙    时间: 2012-10-16 21:38
首先你定义的接口



interface Contents
{
         void go(){};
}
是不能有方法主体,要把void go(){};改成void go();
因为你定义的接口,定义接口的时候接口的方法默认的全是抽象方法且都是pulib权限
你在复写的时候要保持权限一致,不然就会提醒“不能降低自 Contents 继承的方法的可视性”所以要public权限
作者: 魏亮    时间: 2012-10-16 21:39
不是全部内部类都要写public,而是你的代码里实现的是接口,接口的方法前都有public
作者: 陈家明    时间: 2012-10-16 21:39
完整的
interface Contents
{
     public abstract void go();// 接口中的成员都是public,在覆盖抽象方法也应为public
}
作者: 丁旭    时间: 2012-10-16 21:45
interface Contents
{
         void go(){};
}
这个接口里的成员是public的,实现类中的重写方法也必须是public的,访问权限不能比接口中的小
作者: 陈虹旭    时间: 2012-10-16 21:56
接口中的方法都是默认public abstract的 ,新建的匿名内部类其实是接口的子类对象的实例化,要重写接口中的访问方法,就必须要保证重写的方法权限不小于接口(父类)的权限才行,否则编译不通过...
作者: 王虎    时间: 2012-10-16 22:26
接口中的所有方法默认的修饰符是  public abstract  
子类或实现类在重写时权限不得超过父类或接口,这是JAVA中的规定
作者: 邹海洋    时间: 2012-10-17 02:32
1.




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