JAVA 实例化对象的时候一种特殊的写法,请教下这么写的规范及好处 本帖最后由 chzhf1987 于 2010-08-31 09:46:22 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 就像这么写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只是这个方法里的形参而已 这种写法隐藏了继承父类、重写子方法,如果不这么写,就必须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(); 这是内部类的东西,具体说是匿名内部类。 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的,我们不能直接实例化。必须要用一个实现类。 而专门写个实现类,取个什么名字又觉得没有必要,因为它是一次性使用的,其他地方也不要用;故使用匿名内部类。 从原理上来讲,是一个继承了(new 后面对象)的一个匿名内部类,常用的是new一个接口然后实现接口的方法。这个很方便啊,顶4楼和6楼 关于打印的问题。谢谢各位高手。还可以再追加分 关于重写tr的问题 swing ,Frame 获取标题栏上最大化和关闭按钮 和 static main()的问题 linux下批量修改xml文件内容 简单问题,选D还是E呢 急求?100分在线等 applet 上弹出对话框问题 各位大侠java中怎么创建文件夹??? 在tomcat4.04下,怎么连接到oracal数据库,要用什么驱动? win98 下 的 "TOMCAT_HOME contains non-8.3 directory names" 问题要怎么才能解决? scjp中的一道题 求类似QQ空间日志的编辑器
protected String getString(String name){
String msg="hello "+name;
return msg;
}
};问题:这么写要注意些什么。还有,方法getString中的 参数 name 从哪获得。
就像我之前写的,方法 protected Node createNode(Object pUserData, UserDataUncoder pUncoder) 里面参数pUserData从哪里来,因为到最后页面显示的时候,pUserData里面的东西都拿到了,可是我却没看到实参,pUserData只是这个方法里的形参而已
例如:
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();
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的,我们不能直接实例化。必须要用一个实现类。 而专门写个实现类,取个什么名字又觉得没有必要,因为它是一次性使用的,其他地方也不要用;故使用匿名内部类。