В этот раз я начал изучать 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?

Много пробовали и упорно искали, но безуспешно. возможно, это из-за моего плохого английского.
Я не могу перейти к следующей главе из-за моего любопытства. Любая помощь будет оценена по достоинству.

+) Я даже не уверен, подходит ли мне заголовок, но я был бы признателен, если бы вы сообщили мне, если его нужно исправить.

0
love Croquembouch 23 Сен 2021 в 20:08

3 ответа

Лучший ответ

Ваша проблема в том, что вы меняете имя и компанию объекта 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
    }
}

Обратите внимание, что не устанавливать частные переменные-члены вашего класса не идеально, и доступ к ним должен осуществляться только с использованием методов получения и установки.

2
alonkh2 23 Сен 2021 в 17:17

Вы хотите, чтобы классы были разделены, а затем вы пишете Info_C extends Info, например, наследование или? Таким образом, вы можете использовать методы и атрибуты класса «Info».

0
Marko 23 Сен 2021 в 17:14

Вы ищете что-то вроде этого:

public class Info_C extends Info

Базовый класс, Info в этом случае передаст свои свойства дочернему классу. вы можете вызвать конструктор родительского класса с помощью super().

См. Также: https://www.w3schools.com/java/java_inheritance.asp < / a>

0
D4NT3 23 Сен 2021 в 17:16