• AJPFX总结匿名类及其使用


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

  • 相关阅读:
    Google Authentication 机制原理
    ldap日志
    ldap + kerberos 整合
    kerberos
    U盘格式化后的恢复
    初始化脚本(Os_Init_Optimization.sh)
    拿到新机器,进行初始化和部署Nginx的过程
    python 列表生成式
    python 装饰器
    简单总结无线CPE、无线AP、无线网桥的不同之处【转】
  • 原文地址:https://www.cnblogs.com/AJPFX/p/10867845.html
Copyright © 2020-2023  润新知