本帖最后由 chzhf1987 于 2010-08-31 09:46:22 编辑

解决方案 »

  1.   

    就像这么写Student stu = new Student(){
       protected String getString(String name){
            String msg="hello  "+name;
            return msg;
       }
    };问题:这么写要注意些什么。还有,方法getString中的 参数 name 从哪获得。
    就像我之前写的,方法 protected Node createNode(Object pUserData, UserDataUncoder pUncoder) 里面参数pUserData从哪里来,因为到最后页面显示的时候,pUserData里面的东西都拿到了,可是我却没看到实参,pUserData只是这个方法里的形参而已
      

  2.   

    这种写法隐藏了继承父类、重写子方法,如果不这么写,就必须NEW一个新对象出来。
    例如:
    Student stu = new Student();
    stu.getString("zhangsan");==> 输出:zhangsan.而:
    Student stu = new Student(){
       protected String getString(String name){
            String msg="hello  "+name;
            return msg;
       }
    };
    stu.getString("zhangsan");==> 输出:hello zhangsan.----------------------换一种写法就是:public class Xstudent extends Student{
       protected String getString(String name){
            String msg="hello  "+name;
            return msg;
       }
    }Xstudent stu = new Xstudent();
      

  3.   

    这是内部类的东西,具体说是匿名内部类。        AbstractWebTreeModelCreator treeModelCreator = new AbstractWebTreeModelCreator() {
                protected Node createNode(Object pUserData, UserDataUncoder pUncoder) {                MenuInfoTo orgMenuTo = (MenuInfoTo) pUserData;
                    WebTreeNode result = new WebTreeNode(orgMenuTo.getMenuName(),
                            "menu" + orgMenuTo.getMenuId());
                    result.setValue(orgMenuTo.getMenuId().toString());
                    String tmp = LoginAuthorityServiceImpl.getUrlPrefixStatic();
                    if(orgMenuTo.getMenuAction()!=null){ 
                        result.setAction("javascript:openURL('"+orgMenuTo.getMenuName()+"','"+orgMenuTo.getMenuId()+"','"+tmp+"/toListPageFromMenu.action?menuURL="
                                +orgMenuTo.getDomainName()+orgMenuTo.getMenuAction()+"&domainName="+orgMenuTo.getDomainName()+"')");        
                    }
                    
                    if(orgMenuTo.isMenuDisabled()){
                        result.setDisabled(orgMenuTo.isMenuDisabled());
                    } 
                    
                    return result;
                }
            };这就是new了一个匿名的AbstractWebTreeModelCreator的对象赋值给treeModelCreator。
    就你这个例子而言,现在有个AbstractWebTreeModelCreator类,因为是abstract的,我们不能直接实例化。必须要用一个实现类。 而专门写个实现类,取个什么名字又觉得没有必要,因为它是一次性使用的,其他地方也不要用;故使用匿名内部类。
      

  4.   

    从原理上来讲,是一个继承了(new 后面对象)的一个匿名内部类,常用的是new一个接口然后实现接口的方法。这个很方便啊,顶4楼和6楼