首页 > 解决方案 > 在Java中更改实例的属性时如何在其他类中使用它

问题描述

这次我开始学习Java。
我很开心学习它,但有些部分我不明白,所以我问。

下面是我写的代码。

public class Info {
    String name;
    String company;
    
    Info(String n, String c) {
        name = n;
        company = c; 
    }
    public void setName(String name) {
        this.name = name;
    }
    public void setCompany(String company) {
        this.company = company;
    }
    
    public String toString() {
        return this.name + ". working at " + this.company;
    }
   
}

public class Info_C {
    String position;
    String dept;
    String name;
    String company; 
    
    Info_C(Info i, String p, String d) {
        name = i.name;
        company = i.company; 
        position = p;
        dept = d;
    }
    public void setInfo(Info i) {
        this.name = i.name;
        this.company = i.company;
    }
    public void setPosition(String p) {
        this.position = p;
    }
    
    public String toString() {
        return this.name + ". Working as a " +this.position + " in " + this.company + "'s " + this.dept;
    }

    public static void main(String[] args) {
        var Pf_B = new Info("Bob","Apple");
        var Pf_J = new Info("James","Google");
        
        var TM = new Info_C(Pf_B, "Team Manager","Sales Team1");
        var AM = new Info_C(Pf_B, "Assistane Manager","HR Team");
        var RE = new Info_C(Pf_B, "Research Engineer","R&D Team");
        
        System.out.println(Pf_B); // Bob. working at Apple
        System.out.println(Pf_J); // James. working at Google
        System.out.println(TM);   // Bob. Working as a Team Manager in Apple's Sales Team1
        System.out.println(AM);   // Bob. Working as a Assistane Manager in Apple's HR Team
        System.out.println(RE);   // Bob. Working as a Research Engineer in Apple's R&D Team
        
        Pf_B.setName("Eric");
        Pf_B.setCompany("Samsung");
        AM.setPosition("Team Manager");
        RE.setInfo(Pf_J);
        
        System.out.println("=========================Changed==========================");
        
        System.out.println(Pf_B); // Eric. working at Samsung
        System.out.println(TM);   // Bob. Working as a Team Manager in Apple's Sales Team1 
                                  // Why Bob. Apple? Thought Eric. Samsung
        System.out.println(AM);   // Bob. Working as a Team Manager in Apple's HR Team
                                  // Same here
        System.out.println(RE);   // James. Working as a Research Engineer in Google's R&D Team
    }
}
 

在修改Info类的实例属性时,有什么办法可以让它应用到Info_C的实例属性上呢?

尝试了很多并努力搜索,但失败了。也许是因为我的英语不好。
由于我的好奇,我无法继续下一章。任何帮助,将不胜感激。

+) 我什至不确定这个标题是否适合我,但如果你让我知道它是否需要更正,我将不胜感激。

标签: java

解决方案


您的问题是您正在更改对象的名称和公司Info,但这不会更改Info_C对象中的所述值。为了解决这个问题,我会将您的代码更改为 -

public class Info {
    String name;
    String company;
    
    Info(String n, String c) {
        name = n;
        company = c; 
    }
    public void setName(String name) {
        this.name = name;
    }
    public void setCompany(String company) {
        this.company = company;
    }
    
    public String toString() {
        return this.name + ". working at " + this.company;
    }
   
}

public class Info_C {
    String position;
    String dept;
    Info info; 
    
    Info_C(Info i, String p, String d) {
        position = p;
        dept = d;
        info = i;
    }
    public void setInfo(Info i) {
        info = i;
    }
    public void setPosition(String p) {
        this.position = p;
    }
    
    public String toString() {
        return info.name + ". Working as a " +this.position + " in " + info.company + "'s " + this.dept;
    }

    public static void main(String[] args) {
        var Pf_B = new Info("Bob","Apple");
        var Pf_J = new Info("James","Google");
        
        var TM = new Info_C(Pf_B, "Team Manager","Sales Team1");
        var AM = new Info_C(Pf_B, "Assistane Manager","HR Team");
        var RE = new Info_C(Pf_B, "Research Engineer","R&D Team");
        
        System.out.println(Pf_B); // Bob. working at Apple
        System.out.println(Pf_J); // James. working at Google
        System.out.println(TM);   // Bob. Working as a Team Manager in Apple's Sales Team1
        System.out.println(AM);   // Bob. Working as a Assistane Manager in Apple's HR Team
        System.out.println(RE);   // Bob. Working as a Research Engineer in Apple's R&D Team
        
        Pf_B.setName("Eric");
        Pf_B.setCompany("Samsung");
        AM.setPosition("Team Manager");
        RE.setInfo(Pf_J);
        
        System.out.println("=========================Changed==========================");
        
        System.out.println(Pf_B); // Eric. working at Samsung
        System.out.println(TM);   // Bob. Working as a Team Manager in Apple's Sales Team1 
                                  // Why Bob. Apple? Thought Eric. Samsung
        System.out.println(AM);   // Bob. Working as a Team Manager in Apple's HR Team
                                  // Same here
        System.out.println(RE);   // James. Working as a Research Engineer in Google's R&D Team
    }
}

请注意,不将类的成员变量设置为私有并不理想,并且只能使用 getter 和 setter 来访问它们。


推荐阅读