黑马程序员技术交流社区
标题:
匿名内部类的问题????
[打印本页]
作者:
荣天
时间:
2012-5-17 16:35
标题:
匿名内部类的问题????
1.例题
interface Inter{
void method();
}
class Test{
根据main 补足代码
}
public class WaibuDemo3{
public static void main(String a[]){
Test.function().method();
}
}
复制代码
========================
interface Inter{
void method();
}
class Test{
static class Inner implements Inter{
public void method(){
System.out.println("method run");
}
}
static Inter function(){
return new Inner();
}
}
public class WaibuDemo3{
public static void main(String a[]){
Test.function().method();
}
}
复制代码
匿名的做法明白了
static class Inner implements Inter{
是什么用处 ? 眩晕 赐教 谢谢!
作者:
荣天
时间:
2012-5-17 16:37
static class Inner implements Inter{ 不是这句话 什么意思 而是在程序中的用处
作者:
李保成
时间:
2012-5-17 16:46
static class Inner implements Inter{ 不是这句话 什么意思 而是在程序中的用处
申明一个静态的内部类Inner,该类实现了你上边所写的Inter接口中的method方法。
作者:
李保成
时间:
2012-5-17 16:52
首先分析一下整个代码。先找主函数入口public static void main(String a[]),那么它会执行下边的这个 Test.function().method() 这个方法。 那么接下来就会跳转到Test类中。因为function是静态类,静态类最大的好处就是直接可以使用类名.方法名来调用。所以会执行到return new Inner()这句话,而这句话是要创建一个新的Inner对象,那么它会执行Inner方法,说到这儿的时候基本上已经没啥难度了,静态内部类Inner实现了Inter接口,所以最后会输出method run这句话。
不知道说的对不对,大家仅供参考,另外又不对的地方,也希望大家提醒一下。谢谢
作者:
袁冬梅
时间:
2012-5-17 16:54
斯认为,你补充的代码的问题很大,要是我我就这样补充,,,你看一下,而且, 你class Inner implements Inter是怎么理解的,我没用过,所以不懂
你看看我的代码吧,可以用匿名内部类搞定
可以运行处结果
class Test{
//根据main 补足代码
public static Inter function()
{
return new Inter(){
public void method()
{
System.out.println("返回一个Inter接口的子类对象!");
}
};
}
}
复制代码
作者:
逄焕玮
时间:
2012-5-17 18:50
本帖最后由 逄焕玮 于 2012-5-17 18:52 编辑
①Test.function() 类名直接调用方法,说明Test类中有一个静态方法function()
②然后Test.function() 又调用了method()方法,说明function()方法返回了一个实例对象,且该对象所属的类中有method()方法
③然后看到包含method()方法的是个接口 interface Inter,所以需要实现该接口中的method()方法
④最后以匿名内部类实现Inter接口中的method()方法就OK了
至于代码嘛,楼上冬梅美眉的就很完美,就不再赘述了{:soso_e121:}
加油{:soso_e130:}
作者:
安路凤
时间:
2012-5-17 19:01
我觉得你疑惑的是为什么要实现接口吧?
首先,主函数的 Test.function().method();
说明Test类名直接调用了方法,说明方法是个静态的,而后边又直接调用了方法,说明
function方法返回的是个类类型变量,
static class Inner implements Inter{
07. public void method(){
08. System.out.println("method run");
09. }
10. }
11.
12. static Inter function(){
13. return new Inner();
14. }
内部类就考虑到了匿名内部类的情况,借用冬梅童鞋的代码,你不知道返回的类型到底是哪个类,所以就定义一个接口,采用IOC的思考方式(控制反转)直接返回接口类型的变量。
而你所定义的内部类则要实现接口以及接口里定义的方法。method则定义为接口里的抽象方法——这只是其中一个解决方案——是毕老师为了讲清楚内部类举得一个列子(不晓得自己说的对不对!有不对的请指出!{:soso_e113:})
public static Inter function()
05. {
06. return new Inter(){
07. public void method()
08. {
09. System.out.println("返回一个Inter接口的子类对象!");
10. }
11. };
12. }
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2