You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:20:46