class TestAnonymousClass {
    
    public static void main(String[] args) {
        
        // anonymous class used to call Attr class
        // constructor and override setValue()
        Attr name = new Attr("Name") {
            
            public Object setValue(Object nv) {
                System.out.println("Name set to " + nv);
                return super.setValue(nv);
            }                    
        };
     
        name.setValue("Jane");  // uses anonymous class overriding method
        ((Attr)name).setValue("Jane"); // still uses overriding method
                
    }
    
}

class Attr {
    private String name;
    private Object value = null;
    
    public Attr(String name) {
        this.name = name;                    
    }
    
    public Object setValue(Object newValue) {
        Object oldVal = value;
        value = newValue;
        return oldVal;
    }
    
    public String toString(){
        return name + " = '" + value + "'";
    }
}


