黑马程序员技术交流社区
标题:
匿名内部类 ?这么一道题
[打印本页]
作者:
不抛弃不放弃
时间:
2013-11-14 11:45
标题:
匿名内部类 ?这么一道题
本帖最后由 不抛弃不放弃 于 2013-11-14 12:34 编辑
infterface Inter{
public void method();
}
class Test{
//推出这里面的匿名内部类的 代码
}
class InnerClassTest{
public static void main(String []args){
Test.function().method();//给定这个 推出匿名内部类
}
}
// 尽量详细讲解 谢谢
作者:
linjl_ll
时间:
2013-11-14 11:59
Test.function().method();//给定这个 推出匿名内部类
看上面这句话,可以先将它肢解下 Test.function();这句通过类名直接访问内部的方法说明function是静态的且是public的,所以类Test应该是下面格式的
class Test{
public static ?(返回值目前不确定) function(){
}
}
在后面加上.method();说明Test.function();返回的是一个对象这个对象中有一个public的method()方法,所以这里返回的是一个实现了Inner接口的类的实例对象(我们知道匿名内部类时这个类必须继承一个类或实现一个接口,那我们这边能不能继承一个累呢?不行因为这边没有声明一个包含method的方法,换句话说只能继承Object,但是Object中没有method方法,这就导致外部无法调用该类的method方法,所以只能实现Inner接口),所以代码如下
class Test{
public static Inner/*这是就确定了类型*/function(){
return new Inner(){
public void method(){system.out.println("in method")/*代码*/}
};
}
}
作者:
黄小贝
时间:
2013-11-14 12:06
interface Inter{
public void method();
}
class Test{
public static Inter function() {
return new Inter() {
@Override
public void method() {
}
};
}
}
/*
* 1)从Test.function()可以看出Test里面有个function方法,而且是静态的(不是静态的需要new一个对象再调用)
* 2)从Test.function().method()的第二个点可以看出Test.function()返回的是一个对象,而且这个对象里面有个method方法
* 3)在从Inter接口可以看出这个类还实现了Inter接口,然后结果就出来了
*/
class InnerClassTest{
public static void main(String []args){
Test.function().method();//给定这个 推出匿名内部类
}
}
复制代码
1)从Test.function()可以看出Test里面有个function方法,而且是静态的(不是静态的需要new一个对象再调用)
2)从Test.function().method()的第二个点可以看出Test.function()返回的是一个对象,而且这个对象里面有个method方法
3)在从Inter接口可以看出这个类还实现了Inter接口,然后结果就出来了
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2