黑马程序员技术交流社区
标题:
匿名内部类,求解
[打印本页]
作者:
章闽
时间:
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