gpt4 book ai didi

Java - 我可以扩展类的实例以使其成为父类实例吗?

转载 作者:行者123 更新时间:2023-11-30 03:17:57 26 4
gpt4 key购买 nike

这是我想要实现的目标的一个小例子。我有一个带有许多参数的类 - 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()

最佳答案

您可以实现Decorator pattern在 Java 中,通过仅在内部保留对它的引用来避免在“扩展”期间从初始对象复制所有字段,但它不再是 Dog (因为 Dog 类有我们避免复制的字段)。

class JumpyDog {
Dog meAsDog;
int jumpHeight;

public JumpyDog(Dog me) {
meAsDog = me;
}

public Dog meAsDog() {
return meAsDog();
}

void jump(){}
}

您可以像下面这样使用它:

Dog dog=new Dog();
JumpyDog meAsJumpy = dog.learnToJump(100);
meAsJumpy.jump()
<小时/>

不,您不能在示例中执行以下操作,因为 Dog 没有 jump() 方法:

Dog dog=new Dog();
dog.makeJumpy();
dog.jump() // Dog has no method jump

关于Java - 我可以扩展类的实例以使其成为父类实例吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32095830/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com