Post-scriptum: 2020/3/13 Puisque le commentaire soulignait que le contenu de cette fois était "masquage de données" plutôt que "encapsulation", il a été corrigé. Le titre est également passé de l'encapsulation au masquage des données.
Cet article est un mémorandum. Bien qu'il s'agisse d'un contenu de niveau de référence, le code à publier dans cet article est ~~ ** L'erreur ** est le centre. C'est dans le but de publier la partie qui s'est réellement trompée lors du codage et de la publier pour une réflexion personnelle. ~~ De plus, je n'aborderai pas la partie profonde ici, car je la passerai en revue plus tard tout en étudiant les questions d'examen Java Silver.
Langue: Java11, JDK13.0.2 Environnement d'exploitation: Windows 10
J'ai confirmé que l'instance créée par new
a ses propres membres (champs et méthodes) hérités de la classe. Mais dans la dernière classe Cat
Cat myCat = new Cat;
mycat.weight = -20;
Et, la valeur qui n'était pas attendue lorsque la classe Cat
a été créée peut être stockée arbitrairement à partir de la méthode main
.
Autoriser l'accès au champ ** (cette fois double weight
) ** défini dans la classe Cat
directement depuis la méthode main
peut causer des problèmes.
private
Par conséquent, lorsque "Je veux avoir un membre (méthode de champ) qui ne peut pas être géré depuis l'extérieur du traitement de classe", le modificateur attaché au membre (méthode de champ) est ** private
**.
Cette fois, je voudrais gérer la classe Cat en passant de la couleur de type String à la hauteur de type double.
re-défi classCat
class Cat
{
private double weight;
private double height;
//classe
public void setWeightHeight(double w,double h)
{
if(w > 0 && w <= 50){
weight = w;
System.out.println("Le poids de ce chat" + weight + "Je l'ai fait kg.");
} else{
System.out.println("Je ne pense pas avoir ce poids ...");
}
if(h > 0 && h <= 200){
height = h;
System.out.println("La hauteur de ce chat" + height + "Je l'ai fait cm.");
} else{
System.out.println("Je n'ai jamais entendu parler d'un chat de cette taille ...");
}
}
double getWeight()
{
System.out.println("Mettez à jour le poids du chat.");
return weight;
}
double getHeight()
{
System.out.println("Mettez à jour la hauteur du chat.");
return height;
}
void introduce()
{
System.out.println("Le poids de ce chat" + weight + "C'est kg.");
System.out.println("La hauteur de ce chat" + height + "cm.");
}
}
Étant donné que la «hauteur de poids» de la classe Cat est désormais «privée», il n'y a pas lieu de s'inquiéter de la valeur altérée.
public
Mais si vous ne pouvez vraiment pas changer la valeur, vous ne pouvez pas changer la valeur de la nouvelle instance myCat
que vous voulez new
.
Mais dans la classe Cat
public void setWeightHeight(double w,double h)
Je veux que vous fassiez attention. Il s'agit d'une méthode définie dans la classe Cat, mais son modificateur est défini sur ** public
**. Il s'agit d'un modificateur "autoriser l'accès depuis l'extérieur de la classe", pendant le traitement
weight = w;
height = h;
Et ** accéder au champ défini sur ** private
**.
Parmi les méthodes, le fait que «private» soit accessible à partir des méthodes de la même classe est utilisé, et le stockage à la valeur définie sur «private» via ** le traitement dans la méthode est possible. Permis **.
public void setWeightHeight(double w,double h)
A une instruction if à l'intérieur, qui peut empêcher l'attribution de valeurs qui ne remplissent pas les conditions. Désormais, vous n'avez plus à vous soucier de stocker des valeurs ridicules.
À propos du processus que j'ai vu cette fois, "Utilisez une méthode pour stocker une valeur dans le champ" privé "." Citant le livre de référence Easy Java 7th Edition
Une fonction qui rassemble des données (champs) et des fonctions (méthodes) dans une classe et attache privée aux membres que vous souhaitez protéger afin qu'ils ne soient pas accessibles sans autorisation.
Est. Cette conception fonctionnelle ** ~~ encapsulation ~~ masquage des données ** Je l'appelle. C'est ** l'un des principes de base de la conception orientée objet **, et des classes sont créées à cet effet. J'aborderai à nouveau d'autres principes, mais ce sont tous des principes importants, je veux donc les saisir fermement.
J'écris et compile des variables et des expressions par moi-même autant que possible, donc si je veux les citer complètement, je vais les décrire.
Easy Java 7ème édition Java SE11 Silver Problem Collection (communément appelé Kuromoto)
Recommended Posts