2016-06-20 19 views
-3

それは異なるアクセス修飾子と2つのコンストラクタを使用しても意味がありません。正確な使用は何ですか?例:の場合:クラス内に異なるアクセス修飾子を持つ2つのコンストラクタ。それは何ですか?

public class Apple { 

    int count; 

    public Apple() 
    { 

    } 

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

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

のいずれかで、我々は右

+0

クラスからはい、しかしアクセス修飾子は、クラスのユーザーが見るものを制御についてのすべてです。 – Tunaki

+0

これは理にかなっていますが、クラス内の*とは何の違いもありません。 [この表](http://stackoverflow.com/a/33627846/276052)の最初の列を参照してください。彼らは引数なしのコンストラクタを使用してください代わりに 'アップル(int型の数)'コンストラクタを使用してから他のクラスを防止したい場合は、このアプローチは完璧な理にかなって。 – aioobe

答えて

2

そうでもないクラスからすべてをアクセスすることができ、コンストラクタの一つ。

この場合たとえば、あなたがcount値を注入するコンストラクタがprivateあり、そしてcountフィールド自体は、デフォルトのアクセス権を持っているのでAppleインスタンスのcountは、(どこでもクラス自体を越えてから)であるかを制御することはできません。

0

正確な使用とは何ですか?他の多くのOOP言語として

Javaはあなたがに過負荷をかけることができますあなたは非常に柔軟な方法で構築または準備することができますので、これは、あなたに異なるパラメータを使用して多くのメソッド/コンストラクタを定義する自由を与え以外ではありません

はいつかそれだけで、内部の内部メソッドを呼び出すオブジェクト内の魔法がどのように機能するかをユーザーに隠れされ、ユーザは、ユーザが必要とするものの入力/のために与えるものに依存したオブジェクト... ...

使用が

Apple ap = new Apple(1); 

ような何かを行うことで、アップルを構築することができますが、おそらくユーザーのdoesntの必要性は/ので、彼は

Apple ap2 = new Apple(); 

使用することができ、すぐに

をパスカウントする方法

チェックトリックはデフォルトコンストラクタで内側(なしのparamsを持つコンストラクタ) あるので、あなたはそのコンストラクタが自分自身を呼び出して、リンゴを初期化しますが、count=0である参照として。

int count; 

public Apple() 
{ 
    this(0); 
} 

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

プライベートコンストラクタは、パブリックコンストラクタによって呼び出すことができます。コンストラクタのそれぞれで同じ扱いをしたいのであれば便利ですが、処理だけで構築することはできません。 By:

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 
    } 
    } 

スタティックファクトリでもプライベートコンストラクタを使用できます。

関連する問題