黑马程序员技术交流社区
标题:
求解匿名内部类问题。。见2个问号处
[打印本页]
作者:
Stevenj
时间:
2014-7-7 08:36
标题:
求解匿名内部类问题。。见2个问号处
//-------------------------------------------------110 匿名内部类_练习题
interface Inter {
void method();
}
class Test {
//补足代码,通过匿名内部类
/*
static class Inner implements Inter { //??????????????
public voic method() {
System.out.println("method run");
}
}
*/
static Inter function() {
//return new Inner();
return new Inter() { //不用再写 static 了吗????????????
public void method() {
System.out.println("method run");
}
};
}
}
class M {
public static void main(String[] args) {
Test.function().method();//849function()直接被类名调用,所以它一定是静态的。
}
}
作者:
吴俊勇
时间:
2014-7-7 09:16
看不懂,不知道你的代码补了没有
作者:
ddewym123
时间:
2014-7-7 13:08
LZ,我去翻了内部类的视频,发现第一个?处的代码是多余的。练习要求补足的代码是第二个?处的代码。
如果是关于第二个?的代码为什么这么写,我认为:
Test.function().method();可知,Test类中有一个function()方法,且因为是直接调用,所以是静态的。然后因为它又继续调用method()方法,而method方法是接口inter的一个方法。所以function方法一定返回一个Inter的子类对象,并复写了method方法。由此需要用到匿名内部类。new匿名类时不能加static修饰符(虽然该匿名类其实是静态的)。
当然也可以不用匿名内部类,
那补足的代码为:
static class Inner implements Inter {
public void method() {
System.out.println("method run");
}
}
static Inter function(){
return new Inner();
}
复制代码
作者:
╭月牙湾湾╮
时间:
2014-7-8 01:11
学习了
作者:
引子
时间:
2014-7-8 22:44
你第一个问号处
如果你定义了一个静态内部类 那么你就不必再在function()中定义匿名内部类,可以这样写
static Inner function(){
return new Inner();
}
第二个问号处: 你既然定义了匿名内部类,如果你写static 你想写在哪? 定义匿名内部类时再复写Inter中的方法就可以创建一个子类对象,具有function()方法并可以调用function();方法
作者:
lc2015
时间:
2014-7-10 09:35
看不懂!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2