Java中如何在初始化类对象时自动调用类中的方法?
搞定啦!用构造方法实现初始化自动调用setN()
嘿,你想要在创建Orange对象后自动执行setN()方法,其实Java里的构造方法就是干这个事儿的——它会在对象初始化的时候自动运行,咱们把setN()的调用放进Orange的构造方法里就行啦!
修改后的完整代码
import java.awt.Color; // 别忘了导入Color类,不然编译器会报错哦 public class Fruit { public String name; public double juiceAmount; public Color color; } public class Orange extends Fruit { public String name = "Orange"; public double juiceAmount = 0.3 * 250; public Color color = Color.ORANGE; // 新增构造方法,创建对象时自动执行这里面的代码 public Orange() { setN(); // 把setN()放在这儿,初始化对象时就会自动调用啦 } public void setN(){ super.name = this.name; } }
原理说明
当你写Orange myOrange = new Orange();创建对象时,Java会先帮你执行父类Fruit的默认构造方法,紧接着就会运行Orange自己的构造方法——而我们已经把setN()的调用放在构造方法里了,所以这个方法会自动触发,完全不需要手动去调用它~
额外的小优化建议
我注意到你在Orange类里重新定义了父类Fruit的name、juiceAmount、color这三个变量,其实这会造成「变量隐藏」的问题(子类的变量把父类的同名变量盖住了)。如果你的需求就是给父类的这些变量赋值,其实不用重新定义,直接在构造方法里给父类变量赋值就好,代码会更简洁:
import java.awt.Color; public class Fruit { public String name; public double juiceAmount; public Color color; } public class Orange extends Fruit { public Orange() { // 直接给继承自父类的变量赋值,不用重新定义 name = "Orange"; juiceAmount = 0.3 * 250; color = Color.ORANGE; // 这下连setN()都不需要啦,因为直接给父类的name赋值了 } }
这样改完之后,创建Orange对象时,父类的成员变量会直接被正确赋值,代码也更清爽哦!
内容的提问来源于stack exchange,提问作者shahin rahimi
相关产品推荐
相关产品推荐

