2016-06-20 26 views
-3

Ist es sinnvoll, zwei Konstruktoren mit unterschiedlichen Zugriffsmodifikatoren zu verwenden? Was ist der genaue Verwendungszweck? Für zB:Zwei Konstruktoren mit unterschiedlichen Zugriffsmodifizierern in einer Klasse. Was ist der Nutzen?

public class Apple { 

    int count; 

    public Apple() 
    { 

    } 

    private Apple(int count) 
    { 
     this.count = count; 
    } 

    public void count() 
    { 
     System.out.println("Apple count is" + count); 
    } 
} 

Mit einem der Konstruktor wir alles aus der Klasse rechts

+0

Von der Klasse ja, aber Access-Modifikatoren sind alles über die Kontrolle, was die Benutzer der Klasse sehen. – Tunaki

+0

Dies kann sehr sinnvoll sein, aber es macht keinen Unterschied zu * innerhalb * der Klasse. Siehe die erste Spalte in [dieser Tabelle] (http://stackoverflow.com/a/33627846/276052). Wenn Sie verhindern wollen, dass andere Klassen den 'Apple (int count)' -Konstruktor verwenden und stattdessen sicherstellen, dass sie den no-arg-Konstruktor verwenden, wäre dieser Ansatz durchaus sinnvoll. – aioobe

Antwort

2

Nicht wirklich zugreifen können.

Zum Beispiel in diesem Fall können Sie nicht kontrollieren, was eine Apple Instanz count ist (von überall über die Klasse selbst), da der Konstruktor einen count Wertes Injizieren private ist, und das count Feld selbst hat Zugriff Standard.

0

Was ist die genaue Verwendung?

Java wie viele andere OOP-Sprachen können Sie die Überlastung, ist dies nicht andere ist Ihnen die Freiheit, als geben viele Methoden/Konstrukteurs unter Verwendung verschiedener Parameter zu definieren, so dass Sie in einer sehr flexiblen Art und Weise kann die Konstruktion oder vorbereiten Objekte abhängig von dem, was der Benutzer gibt für die Eingabe/was der Benutzer braucht ...

irgendwann wird es nur intern Methoden innerhalb anrufen, den Benutzer versteckt, wie die Magie im Innern der Objekte funktioniert ...

Beispiel

Prüfung, wie eine Verwendung eines Apple wie

indem etwas konstruieren kann
Apple ap = new Apple(1); 

aber vielleicht sofort die Zählung passieren der Benutzer braucht nicht,/wollen

so kann er

Apple ap2 = new Apple(); 

die Verwendung Trick ist innerhalb des Standardkonstruktors (Konstruktor ohne Parameter) weil, wie Sie sehen, der Konstruktor sich selbst anruft und den Apfel initialisiert, aber mit count=0;

0

Der private Konstruktor kann vom öffentlichen Konstruktor aufgerufen werden. Es ist nützlich, wenn Sie die gleiche Behandlung in jedem Ihrer Konstrukteur machen wollen, aber nicht zulassen wollen, nur mit der Behandlung zu konstruieren. Durch ex:

class Vehicule{ 

    private Vehicule(String name){ 
    this.name=name; 
    } 

    public Vehicule(String name, Motor motor, GazType gazType){ 
    this(name); 
    this.motor=motor; 
    this.gazType=gazType; 
    } 
    public Vehicule(String name,SolarPanel solarPanel){ 
    this(name); 
    this.solarPanel = solarPanel; 
    } 
public Vehicule(String name, int numberOfCyclist){ 
    this(name); 
    this.numberOfCyclist=numberOfCyclist; 
    } 

{ 

     Vehicule car = new Vehicule("ford", engine, gaz);//OK 
     Vehicule tandem = new Vehicule("2wheel2people", 2);//OK 
     Vehicule sailboard = new Vehicule("blueWind", blueSail);//OK 
     Vehicule madMaxCar = new Vehicule("Interceptor", v8Engine, nitroglicerine);//OK 

     Vehicule vehicule=new Vehicule("justeAname")//Compilation Error 
    } 
    } 

Sie können den privaten Konstruktor in der statischen Fabrik auch verwenden.