A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© CongCiYH 中级黑马   /  2016-1-8 17:44  /  687 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

匿名类是一种特殊的内部类,它是在一个表达式内部包含一个完整的类定义。
内部类是在一个类的内部嵌套定义的类,
它可以是其它类的成员
也可以在一个语句块的内部定义
还可以在表达式内部匿名定义
匿名类与其他类的不同就在于匿名,也就是没有名称。 
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()方法的参数。
上面代码的抽象类改成接口同样适用。

评分

参与人数 1黑马币 +18 收起 理由
pllaoyao + 18 赞一个!

查看全部评分

5 个回复

倒序浏览
前面说的还不够全面,等待高手补充
回复 使用道具 举报
写这么详细,辛苦了。。。。
回复 使用道具 举报
赞起......................................
回复 使用道具 举报
有用!我对匿名类的使用还是有点含糊不清楚,
回复 使用道具 举报
学习啦,感谢分享
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马