gpt4 book ai didi

java - 如何初始化父类(super class)构造函数所需的子类中的参数对象?

转载 作者:行者123 更新时间:2023-12-01 18:08:48 24 4
gpt4 key购买 nike

所以,这可能听起来有点奇怪,但让我解释一下。我有一个需要多个参数的父类(super class)。 BufferedImage 对象就是这样的参数之一。现在显然,要在子类中初始化此 BufferedImage 并将其用作参数,我需要使用 try 和 catch block 。我能做到这一点的唯一方法是在构造函数中调用子类的方法。问题是,super() 构造函数必须是子类构造函数中的第一个构造函数。因此,在调用 super() 之前,我无法调用初始化 BufferedImage 的方法。在子类构造函数中调用 super() 时,如何在将 BufferedImage 对象用作参数之前正确初始化该对象?

示例: super /父类

public class CombatEntity {
BufferedImage sprite;
public CombatEntity(String name, BufferedImage sprite) {
//do something
}
}

示例:子类

public class Batman {
BufferedImage sprite;
Batman() {
super("Bruce Wayne", sprite); //sprite hasn't been properly initalized

}

void getSprite() { //I need to call this method before super in order to initalize my image
try {
File f = new File("Batman.png");
sprite = ImageIO.read(f);
}

catch(Exception e) {
//whatever
}

}

}

最佳答案

做这样的事情:

在父类中创建普通构造函数,它接受名称和 Sprite 参数。遵循 JavaBeans 规范生成 getter 和 setters 方法。

CombatEntity:

   public class CombatEntity {

protected String name;

protected BufferedImage sprite;

public CombatEntity(String name, BufferedImage sprite) {
this.name = name;
this.sprite = sprite;
}

/*
* Getters and Setters
*/

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public BufferedImage getSprite() {
return sprite;
}

public void setSprite(BufferedImage sprite) {
this.sprite = sprite;
}
}

在 bat 侠(子)类中创建两个构造函数 - 一个没有参数,您可以在初始化 Sprite 图像之前使用它来创建 bat 侠对象,第二个构造函数与父构造函数类似。当您调用不带参数的构造函数时,它会调用父构造函数并将其参数设置为默认值。然后你可以执行generateSpriteImage(String spriteImagePath)从注入(inject)的路径创建 Sprite 图像。

Batman:

public class Batman extends CombatEntity{

//Default constructor with no parameters
public Batman(){
super("", null);
}

public Batman(String name, BufferedImage sprite){
super(name, sprite);
}

public void generateSpriteImage(String spriteImagePath) {
try {
File file = new File(spriteImagePath);
this.sprite = ImageIO.read(file);
}

catch(Exception e) {
//whatever
}
}
}

希望这对您有帮助。

关于java - 如何初始化父类(super class)构造函数所需的子类中的参数对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34424472/

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