G33*_*33K 6 java oop maintainability inheritance instance
这是我想要实现的目标的一个小例子。我有一个有很多参数的类 - Dog。我有一个子类JumpyDog,我想了解如何“扩展” 的实例Dog以使其成为 的实例JumpyDog。
class Dog {
int age, numberOfTeeth, grumpiness, manyOtherParameters;
JumpyDog learnToJump(int height) {
JumpyDog jumpy = new JumpyDog(this); // I do not want to copy all parameters
jumpy.jumpHeight=height;
return jumpy;
}
}
class JumpyDog extends Dog {
int jumpHeight;
void jump(){}
}
Run Code Online (Sandbox Code Playgroud)
或者我可以这样说:
Dog dog=new Dog();
dog.makeJumpy();
dog.jump()
Run Code Online (Sandbox Code Playgroud)
您可以在 Java 中实现装饰器模式,以避免在“扩展”期间从初始对象复制所有字段,只需在内部保留对它的引用,但它不会再这样了Dog(因为Dog类具有我们避免复制的字段)。
class JumpyDog {
Dog meAsDog;
int jumpHeight;
public JumpyDog(Dog me) {
meAsDog = me;
}
public Dog meAsDog() {
return meAsDog();
}
void jump(){}
}
Run Code Online (Sandbox Code Playgroud)
您可以像下面这样使用它:
Dog dog=new Dog();
JumpyDog meAsJumpy = dog.learnToJump(100);
meAsJumpy.jump()
Run Code Online (Sandbox Code Playgroud)
不,您不能从示例中执行以下操作,因为Dog还没有jump()方法:
Dog dog=new Dog();
dog.makeJumpy();
dog.jump() // Dog has no method jump
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3526 次 |
| 最近记录: |