黑马程序员技术交流社区

标题: 匿名类及其使用 [打印本页]

作者: CongCiYH    时间: 2016-1-8 17:44
标题: 匿名类及其使用
匿名类是一种特殊的内部类,它是在一个表达式内部包含一个完整的类定义。
内部类是在一个类的内部嵌套定义的类,
它可以是其它类的成员
也可以在一个语句块的内部定义
还可以在表达式内部匿名定义
匿名类与其他类的不同就在于匿名,也就是没有名称。 
Java中允许创建子类对象时
除了使用父类的构造方法外
还可以用类体
匿名类就是一个没有类申明的类体,因为没有名称,所有匿名类不可以申明对象,但却可以使用类体创建对象。
例如:
A是一个子类,那么下面的代码就是A的一个子类(匿名类)创建对象。   
new A(){    
匿名类的类体   
};    
由于匿名类是一个子类,所以和有一般子类的特征。可以继承父类的方法,同样也可以重写父类的方法。
值得提醒的是,在使用匿名类时,一定是在某个类中直接用匿名类创建对象,因此匿名类必定是内部类,所以和其他匿名类一样可以访问外嵌类中的成员变量和方法。
非静态匿名类的类体中不可有static成员变量和static方法。   

尽管匿名类没有申明(这里说的声明就是,没法给匿名类创建的匿名对象来定义一个变量接收)的步骤,但可以在创建匿名对象时返回一个引用赋值给匹配参数。  
匿名类的常用方式是向方法的参数传值。
具体方法如下:   
abstract class Speak{    
        public abstract void speakHello();   
}    

class Student{   
        void f(Speak sp){   
                sp.speakHello();   
        }   
}    

public class AnonymousClassDemo {   
        public static void main(String[] args) {   
                Speak speak = new Speak(){   
                        public void speakHello(){    
                                System.out.println("大家好,祝工作愉快!");   
                        }   
                };    
                speak.speakHello();    
                Student st = new Student();   
                st.f(new Speak(){    
                        public void speakHello(){    
                        System.out.println("I am a student, how are you");   
                        }   
                }
                );   
        }   
}
上面红色的代码就是使用匿名类创建的匿名对象赋值给f()方法的参数。
上面代码的抽象类改成接口同样适用。

作者: CongCiYH    时间: 2016-1-8 18:02
前面说的还不够全面,等待高手补充
作者: s1714534118    时间: 2016-1-8 19:42
写这么详细,辛苦了。。。。
作者: pllaoyao    时间: 2016-1-8 20:37
赞起......................................
作者: 手有键盘心不慌    时间: 2016-1-8 22:16
有用!我对匿名类的使用还是有点含糊不清楚,
作者: 229390221    时间: 2016-1-10 22:21
学习啦,感谢分享




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2