【发布时间】:2015-11-12 18:32:21
【问题描述】:
这是我想要实现的一个小的人工示例。我有一个有很多参数的类 - 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(){}
}
或者我可以这样说吗:
Dog dog=new Dog();
dog.makeJumpy();
dog.jump()
【问题讨论】:
-
你希望 Dog 是 JumpyDog 的一个实例,而 JumpyDog 是 Dog 的一个实例?
-
您想在初始化后更改对象的类型。这在 Java 中是不可能的。您必须将
Dog属性复制到JumpyDog的新实例中。 -
不,您不能在实例创建后神奇地切换其类。
-
我能以某种方式复制所有属性而不命名它们吗?
-
当您扩展父类 (
Dog) 时,所有公共和受保护的属性也会出现在子类 (JumpyDog) 中。您添加了新属性jumpHeight,但您仍然可以不受限制地操作age、numberOfTeeth。
标签: java oop inheritance instance maintainability