黑马程序员技术交流社区
标题:
新手求助,匿名内部类问题!
[打印本页]
作者:
易伟
时间:
2012-2-2 16:05
标题:
新手求助,匿名内部类问题!
本帖最后由 易伟 于 2012-2-3 10:13 编辑
interface pr
{
void print1();
}
public class noNameClass
{
public pr dest()
{
return new pr(){ //这里使用了匿名内部类,但是为什么要这么用啊?
public void print1()
{
System.out.println("Hello world!!");
}
};
}
public static void main (String args[])
{
noNameClass c=new noNameClass();
pr hw= c.dest(); //c.dest() 获取的值是什么?是"hello world"吗?如果是,为什么下面还要调用print1这个方法,
//直接System.out.println(hw)不就可以么?
//如果不是,c.dest()的值是什么?
hw.print1();
//pr hw = new pr(); //匿名内部类可不可以这样创建对象呀?
}
}
对匿名内部类不是很了解,不懂的都在注释中,请各位大虾帮帮忙!
作者:
刘基军
时间:
2012-2-2 16:55
本帖最后由 刘基军 于 2012-2-2 16:55 编辑
若是不使用匿名内部类,其等价代码如下:(你感觉哪个书写格式简洁呢?)
interface pr
{
void print1();
}
class prSub implements pr
{
public void print1()
{
System.out.println("Hello world!!");
}
};
class noNameClass
{
public pr dest()
{
return new prSub();
}
public static void main (String args[])
{
noNameClass c=new noNameClass();
pr hw= c.dest(); //c.dest() 获取的值是什么?是"hello world"吗?如果是,为什么下面还要调用print1这个方法,
//直接System.out.println(hw)不就可以么?
//如果不是,c.dest()的值是什么?
hw.print1();
//pr hw = new pr(); //匿名内部类可不可以这样创建对象呀?
}
}
复制代码
作者:
彭嘉聪
时间:
2012-2-2 17:05
pr hw= c.dest(); 你可以看下dest()return的是什么?,其实就是返回的是pr这个对象,因为你返回的是匿名内部类创建接口pr的子类对象。
其实这个也是方便书写而已,有一些对象是只创建一次使用一次的,当你学到GUI里面的监听器的时候就会发现
有一些类不需要特地的去继承只在方法内部实现其子类就可以了。
下面是匿名内部类的特点
匿名内部类:
1,匿名内部类其实就是内部类的简写格式。
2,定义匿名内部类的前提:
内部类必须是继承一个类或者实现接口。
3,匿名内部类的格式: new 父类或者接口(){定义子类的内容}
4,其实匿名内部类就是一个匿名子类对象。而且这个对象有点胖。 可以理解为带内容的对象。
5,匿名内部类中定义的方法最好不要超过3个。
作者:
易伟
时间:
2012-2-2 17:12
刘基军 发表于 2012-2-2 16:55
若是不使用匿名内部类,其等价代码如下:(你感觉哪个书写格式简洁呢?) ...
还有呢,只是因为简洁吗?匿名内部类应该还有很多其他的特点把?
作者:
尹旗龙
时间:
2012-2-2 17:14
非大虾前来帮忙
匿名内部类在经常以下几个情况下使用:
类非常小,大约四五行代码吧
只用到类的一个实例
定义后马上就要用到
在你的程序中 dest()方法可以将返回值的生成与返回值类的定义两个动作放在一起执行,从语法上讲是创建了一个继承自pr的匿名类的对象,通过new表达式返回的引用被自动向上转型为对pr的引用,所以c.dest() 获取的是一个对象类型的引用,当然要调用print1方法彩能输出语句了
这样用因为在真正的开发中这样用回提高效率啊 可以即时的定义print1方法里实现的功能嘛
最后一句pr hw = new pr(); 是不行的 因为在程序中pr是一个接口 接口是不能实例化对象的 这样用时会报错的
作者:
刘基军
时间:
2012-2-2 17:14
呵呵,其他的我还不知道
作者:
尹旗龙
时间:
2012-2-2 17:18
楼上大牛啊 技术分好夸张啊
作者:
毛溯澜
时间:
2012-2-2 20:32
pr hw= c.dest(); 简单的说,返回的是new 匿名类名
只是创建匿名对象而已。
后面hw.print1(); 打印而已
为什么用匿名呢?我也不知道,看楼上的好了。我的理解是节省代码,不用取名字。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2