黑马程序员技术交流社区
标题:
看看这个小程序
[打印本页]
作者:
Be_myself
时间:
2014-6-19 22:57
标题:
看看这个小程序
package lianxi;
interface Test{
void fun();
}
public class Demo{
public static void main(String[] args){
new Demo().show(new Test(){
public void fun(){}
});
}
void show(Test t){
t.fun();
}
}
1.不是说定义匿名内部类的前提是内部类必须是继承一个类或实现一个接口,为什么这道题没有继承的关系,没有
implements
和
extends
。
2.new Demo()
.show
是什么意思是,住函数的类也可以new吗?
3.分析下程序。
作者:
_qishiwobusha_
时间:
2014-6-20 00:07
1.new Demo.show(new Test(){ public void fun(){}},这行代码就是实现了Test接口,
相当于class Anonymous implements Test{public void fun(){}}
Anonymous a = new Anonymous();
new Demo.show(a);
2.new Demo().show();这行代码是创建一个Demo对象然后调用对象的show()方法。
相当于 Demo d = new Demo(); d.show(); 有主函数的类也是可以实例化的,主函数只是程序运行的一个入口,不需要实例化就可以调用的,所以main函数都是静态的static。
运行程序,java虚拟机直接找到程序入口,main函数,实例化Demo,调用Demo实例化对象的show方法,
show方法是非静态方法,需要Demo的实例才能调用。
作者:
tiuwing
时间:
2014-6-20 00:26
本帖最后由 tiuwing 于 2014-6-20 00:28 编辑
那段代码可以拆开来写成下面的形式,只不过因为只用到一次,就没必要特定去定义变量
class Demo{
public static void main(String[] args){
new Demo().show(new Test(){
public void fun()
{System.out.println("dd");}
});
//上面那段代码可以拆开来写成下面的形式,只不过因为只用到一次,就没必要特定去定义变量
Demo d = new Demo();
Test t = new Test(){
public void fun(){System.out.println("ddd");}
};
d.show(t);
}
void show(Test t){
t.fun();
}
}
interface Test{
void fun();
}
复制代码
new Demo().show(),其实也就是new 一个对象,然后直接调用它的方法。只不过这个对象我只用它一次而已!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2