是否有可能有类A
带有空法说render()
..然后你创建类的3个实例,让你有对象b, c, d
,所以我然后分配机构为每个对象的渲染方法?
这里有一个例子,在JavaScript中,你可以有一个对象说a
,然后在任何地方,你可以说
a.method = function() { /* do something */ }
该行后,你将有名称的方法, method
为对象a
和,只要调用时,它将/* do something */
。
这是可能在Java中,什么是语法?
我的想法是有一个button
类,并分配不同的行动,它的实例的click
不同的情况下/上下文中使用的内部方法,所以我没有定义不同的子类的每个动作。
您可以annomyously实例化的子类, A
类并覆盖你想在它的方法。 像这样
A a = new A(){
@Override
public void render(){
//do something
}
};
A b = new A(){
@Override
public void render(){
//do something
}
}
在Java中,你无法绕过的功能,你可以在Javascript。
您需要创建一个类或接口被称为像Handler
(最好是更具描述性的!),其中声明要调用的方法。 然后,你可以做一些与此类似:
a.method = function() { /* do something */ }
但你必须制定它作为
a.method = new Handler() {
public void function() {
/* do something */
}
};
并把它作为a.method.function()
我的想法是有一个button
类,并分配不同的行动,它的实例的click
不同的情况下/上下文中使用的内部方法,所以我没有定义不同的子类的每个动作。
这正是摇摆是怎么做的。 它通常会是这个样子:
myButton.setAction(new AbstractAction("Click me!") {
public void actionPerformed() {
// do something
}
});
你不能定义方法体类实例化后 A
,但是当你实例化它,你可以定义方法体。
interface A {
void method();
}
A b = new A() {
@Override
public void method() {
//body for instance b
}
};
A c = new A() {
@Override
public void method() {
//body for instance c
}
};
不,你不能这样做,在Java中。 一个方法的实施完全由运行时类型它的对象的确定。
但是,你可以使用的策略模式,它实际上是什么正在做(或多或少)由标准Swing框架:您可以设置一个Action
一个JButton
,而Action
的actionPerformed()
方法是在点击按钮时调用。 它是对象之间只是委托。
如果你只是想实例具有渲染方法的类只有一个对象,你可以使用委托; 你可能想这样做,如果这个类是一个重量级的。
这实际上是策略模式 :
class MyClass {
private Behavior behavior;
public void setBehaviour(Behavior someBehaviour) {
this.behavior = someBehavior;
}
public void render() {
behavior.render();
}
}
interface Behavior {
void render();
}
class BehaviorA implements Behavior {
public void render() {
//do behavior A
}
}
class BehaviorB implements Behavior {
public void render() {
//do behavoir B
}
}
class RunnerClass {
public static void main(String[] args) {
MyClass myClass = new MyClass();
myClass.setBehavior(new BehaviorA()); //actually you should put a factory for behavioir
myClass.render();//render A logic is done
myClass.setBehavior(new BehaviorB());
myClass.render();//render B logic is done
}
}
好了,说实话这听起来像Java中的纯多态性,可以通过两种方式实现:
http://java.sys-con.com/node/37695
http://www.javaworld.com/javaworld/javatips/jw-javatip30.html