Warum deklarieren Sie Variablen private in einer Klasse?
Leute ich werde anfangen, indem Sie sich entschuldigt, als ich bin sicher, dies wurde bereits beantwortet und anderswo - ich kann einfach nicht finden, eine Antwort, erklärt, dass es in einer Weise, die ich verstehen! Ich mache einen MSc conversion-Kurs und es gibt einige Elementare Grundlagen, die ich bin immer noch am kämpfen mit diesem, so auch hier - warum macht eine variable private ist besser.
Sagen, ich habe eine Java-Klasse namens Person, mit der print-Methode. Ich könnte es schaffen und es als solches definieren:
public class Person
{
public String name;
public String telephoneNumber;
public void print()
{
System.out.println(name + " " + telephoneNumber);
}
}
Dann in einer main-Klasse, könnte ich den folgenden code schreiben:
class testPerson
{
public static void main(String[] args)
{
Person test;
test = new Person();
test.name = "Mary";
test.telephoneNumber = "01234 567890";
test.print();
}
}
Wenn ich dies Tat, den test.print(); erzeugen die Ausgabe:
mary 01234 567890
Aber ich weiß, gilt dies als schlechte Programmierung. Variablen sollten private innerhalb einer öffentlichen Klasse, da wir nicht wollen, um Menschen zu erlauben, zu sehen, wie diese Informationen gespeichert sind, oder in der Lage sein, um die Informationen zu Bearbeiten, ohne Genehmigung.
So, jetzt, ich werde Bearbeiten Sie die Klasse "Person" zu erklären, die zwei Strings private und hinzufügen von get-und set-Methoden, etwa so:
private String name;
private String telephoneNumber;
public void setName (String name)
{
this.name = name;
}
public void getName()
{
return name;
}
//same code for telephone methods.
Nun in der main-Klasse, würde ich ändern, die Methoden der Einstellung, name und Telefon an die folgenden:
mary.setName("Mary");
mary.settelephoneNumber("01234 567890");
Nach der Vorlesung die Notizen, die ich verfolge, das ist effizienter (obwohl könnte noch effizienter, indem eine Person () - Methode auf, damit die Instantiierung etc.)
Jedoch bin ich kämpfen, um zu sehen, warum dies besser ist.
In der ehemaligen Methode, Dinge zu tun, könnte der Benutzer direkt Zugriff auf die Variablen. Aber auch wenn Sie durch ausblenden der Variablen, Sie können nicht direkt darauf zugreifen, kann der Benutzer indirekt Zugriff auf und ändern Sie liefert exakt dasselbe Ergebnis.
Warum ist es, dass diese bevorzugt wird und was ohne Zweifel albern Ding bin ich fehlt/Blick?
stackoverflow.com/questions/1568091/why-use-getters-and-setters Sie interessieren könnten.
Nicht sicher, ob jemand wird dies Lesen, aber würde die person, die down-stimmten dieser Frage darauf zu erklären, warum? Danke.
Dies ist eine alte Qn aber ich ernsthaft nicht verstehen, warum wurde es geschlossen, da off-topic? Dieser link kam zuerst auf meine Google-Suche nach etwas im Zusammenhang mit der Einstellung private Variablen. (Der einzige Nachteil dieses Qn ist zu ausführlich für das, was es fragt. Das kann korrigiert werden durch Bearbeiten ) und Markieren es als doppelte ist auch in Ordnung, aber nicht off-topic. Re-opening.
Ich halte diese Frage viel besser gebildet als andere, weil es in der Art "Zuerst ich Ein, aber dann ändere ich es nach B, was ist also der Unterschied?" mit konkreten Beispielen. Und das macht das Thema viel verständlicher
InformationsquelleAutor Andrew Martin | 2013-02-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es ist nicht so, dass es effizienter ist, sondern dass es mehr wartbar und eine gute übung.
Beispielsweise mit setter-Methoden, Sie können Ihre
setTelephoneNumber
tatsächlich überprüfen, dass dieString
ist eine gültige Telefon-Nummer, bevor Sie tatsächlich tun, die Einstellung. Sie konnte nicht möglicherweise, wenn du die variable public. Mit einem setter von Anfang an bedeutet, dass Sie können zurück gehen und z.B. hinzufügen von Validierung später, in der Erwägung, dass, wenn Sie hatte die variable public, müssten Sie Set und ändern Sie alle Ihre Benutzer überall Verwendung der setter, statt einer änderung der variable direkt.+1 Sie können nicht wollen, ein setter an alle. Manchmal werden Sie vielleicht nicht wollen, eine get-Methode, nur einen setter.
Ich habe für diese gestimmt wie die Antwort, denn es war die erste Antwort gegeben und sehr verständlich erklärt die Vorteile der privaten Variablen. Danke!
und manchmal möchtest du wieder kopieren des Objekts nicht das Objekt selbst. Getter werden lassen, tun Sie das.
InformationsquelleAutor Louis Wasserman
Pizza-Lieferservice Analogie
Lesen über Informationen Ausblenden und Die Kapselung information hiding nicht.
Ich würde verlängern die Analogie zu sagen, nicht nur, dass Sie ihm die Brieftasche, die Sie nicht einmal ihm zu sagen, dass Bargeld aus der es - Links, um es herauszufinden, er endet, wobei eine Zahlung mit einer Kreditkarte, maxes Ihr Konto. Ok, vielleicht nehmen Sie es ein bisschen weit, aber das Prinzip ist da, Sie können nicht annehmen, dass andere wissen, was Sie können und können nicht berühren innerhalb Ihrer Klasse!
InformationsquelleAutor Aravind R. Yarram
Leute geben, die Millionen wiedergekäut Gründe, warum es besser ist, aber es ist nur besser in einige Fällen, nicht in allen von Ihnen klar. Nehmen wir zum Beispiel den Java-eigenen Klasse
GridBagConstraints
—es hat keine Methoden auf allen (wenn Sie nicht zählenclone
, es hat sowieso; alle Java-Klassen Erben vonObject
). Warum? Da gibt es einen Fall, wo dies ist in der Tat praktischer. UndGridBagConstraints
ist eine Java-Bean im reinsten Sinn: es ist alles über Eigenschaften, keine business-Logik.Lassen Sie mich der Bericht auf eine weitere Tatsache aus der Praxis: keine setter jemals überprüft seinen Eingang; keine getter jemals berechnet das Ergebnis. In der Welt von JavaBeans, solche Verhalten werden bald in der Art der universellen Annahme, dass setter set und Getter bekommen. Grundsätzlich, wenn Sie abweichen, die in irgendeiner Weise aus der genauen Entsprechung von öffentlichen Bereichen, die Sie verlieren.
Den modernen Java-APIs, wie Hibernate, erkennen diese Tatsache durch die Annahme der nackt öffentlichen Bereichen gleichberechtigt mit JavaBean-Stil-Eigenschaften. In früheren Versionen nicht möglich ist, aber wie die Erfahrung mit Java Tätigkeit, der Realisierung ist es endlich dämmert, dass die öffentlichen Felder sind OK.
Sehr gut gesagt. OOP ist meist als nicht ein Mittel zum Zweck, sondern ein Symbol der religiösen Ausdauer. Man sollte wissen, Wann diese zu nutzen, wie nutzen Sie es, und wenn auf vermeiden.
InformationsquelleAutor Marko Topolnik
Müssen Sie operieren auf der Annahme, dass irgendwann jemand anderes verwenden Ihre code - und, dass jemand anderes könnte Sie sein, ein Jahr auf der ganzen Linie. Wenn Sie sehen, eine öffentliche Eigenschaft der Klasse, die Sie sollten in der Lage sein, zu vermuten, dass es kostenlos für Sie zu manipulieren, wenn es nicht direkt geändert, Sie sollten nicht in der Lage, um zu sehen, es nach außen.
Einen guten literal Beispiel wäre die Dimensionen eines bitmap-Objekts. Die meisten Maschinen, die es nicht möchte, wenn Sie versucht haben, zeichnen Sie ein bitmap-Dimensionen -10x-10, weil so etwas wäre natürlich unmöglich darstellen auf einem Bildschirm. Wenn die width/height-Eigenschaften dieser bitmap waren einfach public-Variablen, ist es möglich, dass Sie möglicherweise auf ungültige Werte später von einem wohlmeinenden coder (NIE davon ausgehen, dass es nicht passieren würde), und wenn es kam, um es darzustellen - bang, du hast eine gefrorene computer.
Durch ausblenden der Variablen, und verwenden Sie eine Set-Sie können verhindern, dass dies jemals geschieht:
Jedoch, für die Schnelligkeit und Bequemlichkeit, die Sie nicht haben, zu entwickeln, Ihren code, wie dies auf den ersten - so stellen Sie sicher, Sie gehen durch es hinterher und verstecken, was Sie brauchen!
InformationsquelleAutor MickMalone1983
gibt es auch security-Aspekte zu berücksichtigen. ein häufiges Beispiel ist ein bank-Konto. Sie haben ein Verhältnis, und verwenden Sie einzahlen, um in Geld, und Rückzug, um Geld. wenn das Gleichgewicht der öffentlichkeit gab, konnte es verändert werden, ohne Hinterlegung oder Geld abheben. das könnte SEHR schlecht.
innerhalb einer Methode können Sie stellen Sie Schecks auf die Dinge, wie dafür, dass Sie nicht mehr Geld aus einem Konto, als tatsächlich vorhanden ist. man kann nicht wirklich tun, wenn Sie Zugriff auf die Werte direkt. es geht um Kontrolle.
InformationsquelleAutor Jeff Hawthorne