Comme je l'ai mentionné dans mon commentaire très initialement lorsque vous avez posté la question, vous devez avoir le champ privé marqué comme protégé afin que la sous-classe puisse y accéder ou fournir des méthodes de mutation.
La deuxième approche est meilleure car elle protège l'encapsulation.
public class UI extends javax.swing.JFrame {
// some code
private javax.swing.JTextArea txtRespond;
protected void appendResponse(String response){
txtRespond.append(response);
}
// your other methods and code if you have.
}
class Backend extends UI {
// some code
void start() {
appendResponse(Bot + ": hello, " + Name + "\n");
}
}
Avoir une classe assumer la responsabilité de modifier son état est une bonne pratique. Nous devrions éviter de les rendre non privés.
* P.S. si bot, Name sont définis dans la classe parente alors vous pouvez juste passer la partie variant de la chaîne et la passer à la méthode parent en tant que paramètres (bien sûr vous devez modifier la signature de la méthode pour accepter plus d'une chaîne) et dans la méthode définition vous pouvez gérer la fusion des chaînes selon les exigences.
Les sous-classes ne peuvent pas accéder aux champs 'private', les marquer' protected' ou fournir des méthodes non privées de mutation des états privés –
Sur le plan du design, je doute que vous ayez l'intention d'étendre l'interface utilisateur de Backend. pour accéder aux méthodes/etc de l'interface utilisateur. Vous devriez séparer ces deux classes (comme Backend est maintenant aussi une interface graphique) et passer une référence à l'un d'eux dans le constructeur de l'autre – Rogue