很多情况下都有类似的逻辑,唯一的不同在于一些细节,这时我们想到了abstract 方法,通过子类重载abstract 方法,但这样会增加很多小的class,通过直接new abstract class将abstract 方法作为参数可以避免创建很多小class。
public abstract class Hidden{
public void encodeEnd(FacesContext facesContext) throws IOException {
ResponseWriter writer = facesContext.getResponseWriter();
writer.startElement("input", this);
writer.writeAttribute("type", "hidden", null);
writer.writeAttribute("name", nameValue().get("name"), null);
writer.writeAttribute("value", nameValue().get("value"), null);
writer.endElement("input");
}
protected abstract Map nameValue();
}
相当于实例化一个AclHidden,但并没有定义AclHidden class
new Hidden() {
public Map nameValue() {
Map<String, String> deployMap = new HashMap<String, String>();
deployMap.put("name", AclUtil.OLDACLGROUP);
deployMap.put("value", AclUtil.getAclGroup());
return deployMap;
}
}
相当于实例化一个DeplyHidden,但并没有定义DeplyHidden class
new Hidden() {
public Map nameValue() {
Map<String, String> deployMap = new HashMap<String, String>();
deployMap.put("name", ProcessForm.BO_DEPLOYMENT_ID);
deployMap.put("value", bussinessObjectContex
.getDeployment().getId());
return deployMap;
}
}
注:当这些直接new的 abstract class在序列化的类中使用时会导致类不能被反序列化,报java.lang.InstantiationException异常,不明白是什么原因。
分享到:
相关推荐
`ConcreteClass`是`AbstractClass`的子类,实现了`doSomething()`方法,并在`main`方法中创建了`ConcreteClass`的对象,调用了继承自抽象类的方法。 抽象类的主要用途包括: 1. **封装变化**:抽象类可以封装可能...
抽象类 Ruby 中的抽象类。 像模块一样,抽象类不能被实例化。 与模块不同,抽象类可以被继承,并且它们的... new #=> AbstractClass::Error - abstract class ActiveRecord::Base can't be instantiated ActiveRec
C# 中的 new、abstract、virtual、override、sealed 关键字的区别和使用代码示例 摘要:本资源旨在对 C# 中的 new、abstract、virtual、override、sealed 关键字进行详细的解释和比较,并提供实践代码示例,以帮助...
Create an abstract Auto class with fields for the car make and price. Include get and set methods for these fields; the setPrice() method is abstract. Create two suclasses for individual automobile ...
public abstract class Subject // 抽象角色 { public abstract void requst(); } ———————————————————————————————— package liang; public class ReallSubject extends ...
这里我们将深入探讨三种常见的Java设计模式:单例(Singleton)、工厂方法(Factory Method)和抽象工厂(Abstract Factory)。 **单例模式(Singleton)** 单例模式确保一个类只有一个实例,并提供一个全局访问点...
new Class[]{AbstractClass.class}, invoker1); // 调用 ClassA 的 show 方法 ac1.show(); // 创建具体类 ClassB 的处理对象 Invoker invoker2 = new Invoker(new ClassB()); // 获得具体类 ClassB 的代理 ...
public abstract class BaseClass { protected BaseClass() { // 构造函数前有new修饰符,防止直接实例化 } } public class DerivedClass : BaseClass { public DerivedClass() { // 可以实例化派生类 } } ...
7. **抽象类与密封类(Abstract and Sealed Classes)** 抽象类不能被实例化,通常用于定义基类。密封类不允许被继承。在VB.NET中,使用`MustInherit`和`NotInheritable`关键字标识它们。 8. **构造函数与析构函数...
ASP.NET面试模拟题 选择题 int[][] myArray3=new int[3][]{new int...abstract class BaseClass { public virtual void MethodA() { Console.WriteLine("BaseClass"); } public virtual void MethodB() { } }
AbstractFactory* factory1 = new ConcreteFactory1(); AbstractProductA* productA1 = factory1->createProductA().release(); AbstractProductB* productB1 = factory1->createProductB().release(); ...
abstract class Animal1{} class Dog1 extends Animal1{} class Cat1 extends Animal1{} abstract class AnimalFactory{ public abstract Animal1 getAnimal(); } class DogFactory extends ...
AbstractClass* obj1 = new ConcreteClass1(); obj1->templateMethod(); // 输出: ConcreteClass1: 执行操作1, ConcreteClass1: 执行操作2 AbstractClass* obj2 = new ConcreteClass2(); obj2->templateMethod...
在这里,`DerivedClass`必须实现`AbstractClass`的`AbstractMethod()`。 总结起来,C#中的对象创建、销毁和继承涉及了类的构造方法、初始化、内存管理、多态性以及资源的有效利用。理解并熟练运用这些概念是成为一...
public class DatabaseConnectionFactory { public static IDatabaseConnection CreateDatabaseConnection(string dbType) { if (dbType == "SQLServer") { return new SQLServerDatabaseConnection(); } else ...
AbstractClass* obj1 = new ConcreteClass1(); obj1->templateMethod(); AbstractClass* obj2 = new ConcreteClass2(); obj2->templateMethod(); delete obj1; delete obj2; return 0; } ``` 编译过程会...
在这个例子中,`AbstractClass`是抽象类,包含两个抽象方法,`ConcreteClass1`和`ConcreteClass2`是它的子类,实现了这两个抽象方法。`printOut`方法是普通方法,子类可以选择是否覆盖。 了解并正确使用`abstract`...
AbstractClass* obj1 = new ConcreteClass1(); obj1->templateMethod(); AbstractClass* obj2 = new ConcreteClass2(); obj2->templateMethod(); delete obj1; delete obj2; return 0; } ``` 在这个例子...
class AbstractClass { abstractMethod() { throw new Error('This is an abstract method and must be implemented in a subclass.'); } } ``` 这里,`abstractMethod`就是一个抽象方法,如果子类没有重写它,...
public abstract class AbstractClothes { public abstract AbstractCoat CreateCoat(); public abstract AbstractTrousers CreateTrousers(); } ``` - **抽象产品角色** ```csharp public abstract class...