黑马程序员技术交流社区
标题:
关于匿名类
[打印本页]
作者:
nxp1986
时间:
2014-6-17 18:13
标题:
关于匿名类
看到匿名内部类的时候完全没明白,肿么办?
前面的都能理解也能自己慢慢的写一点程序就到匿名类卡住了,,,,求解决
作者:
不一样的颜色
时间:
2014-6-17 18:53
匿名类是不能有名称的类,所以没办法引用它们。必须在创建时,作为new语句的一部分来声明它们。这就要采用另一种形式的new语句,如下所示: new <类或接口> <类的主体> 这种形式的new语句声明一个新的匿名类,它对一个给定的类进行扩展,或者实现一个给定的接口。它还创建那个类的一个新实例,并把它作为语句的结果而返回。要扩展的类和要实现的接口是new语句的操作数,后跟匿名类的主体。如果匿名类对另一个类进行扩展,它的主体可以访问类的成员、覆盖它的方法等等,这和其他任何标准的类都是一样的。如果匿名类实现了一个接口,它的主体必须实现接口的方法。
作者:
Alan_Kwan
时间:
2014-6-17 20:01
琢磨一下它的格式,你会明白,其实跟一般的语句没什么不同的。
作者:
江夷
时间:
2014-6-17 22:14
本帖最后由 江夷 于 2014-6-17 22:20 编辑
//接口类
interface Animal{
//(吃的方法)抽象方法
public abstract void eat();
}
//(类实现接口)狗实现动物
class Dog implements Animal{
//重写吃的方法
public void eat(){
System.out.println("吃肉");
}
}
//测试类
class InnerTest8{
public static void main(String[] args){
//Animal d = new Dog(); 这是多态创建dog对象的方式,
//调用method方法 method(
//匿名对象
new Animal(){
//重写吃的方法
public void eat(){
System.out.println("吃肉");
}
}
);
//调用method方法
method(
//匿名对象
new Animal(){
//重写吃的方法
public void eat(){
System.out.println("吃<。)#)))≦");
}
}
);
}
//创建函数(method方法)
public static void method(Animal a){
//吃的方法
a.eat();
}
}
可以将匿名内部类和内部类两个区分来看,
其实就是因为在测试类中需要使用接口方法,需要有类实现接口才能重写方法,所以就创建了一个匿名对象, 这个匿名对象是以Animal的多态的匿名对象形式创建的,然让这个匿名对象来重写接口的eat方法,但因为没有实体对象,所以将这个整个匿名对象以及里面的重写方法用一个单独的method方法装起来,这就是完整的匿名内部类
作者:
人心如水
时间:
2014-6-17 23:00
视频看不懂就看老师的笔记,看会笔记再看视频
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2