2017-08-21 19 views
-7

パラメータ化されたコンストラクタでは、なぜ変数宣言が必要ですか。パラメータ化されたコンストラクタJava

宣言

int id;

以下のコードと同様に、再度、コンストラクタで int i..id=I;

class Student4{ 
    int id; 
    String name; 

    Student4(int i,String n){ 
     id = i; 
     name = n; 
    }  

    void display(){System.out.println(id+" "+name);} 

    public static void main(String args[]){ 
    Student4 s1 = new Student4(111,"Karan"); 
    Student4 s2 = new Student4(222,"Aryan"); 
    s1.display(); 
    s2.display(); 
    } 
} 
+0

ないすべてのパラメータが正確に作成しているオブジェクトに属しているものですので、メソッド/コンストラクタ宣言のパラメータと(この場合)インスタンスフィールドの –

+0

範囲が異なっています。それらは同じ変数ではありません。 – Mena

+0

宣言と割り当ては別物です。 – duffymo

答えて

2

これは変数の「再宣言」ではなく、割り当てではなく、パラメータの働きです。

同じクラスにいるので混乱していると思います。新しい学生を作成する瞬間に、idという変数を使用することはないようです。

public Class Student { 
    private int id; 
    private String name; 

    Student() { 
    } 

    Student(int i, String n) { 
     this.id = i; 
     this.name = n; 
    } 

    //Add here getters & setters 
} 

public Class ClassRoom { 
    public static void main (String args[]) { 
     Student student1 = new Student(1, "John"); 
     Student student2 = new Student(2, "Sarah"); 

     System.out.println(student1.getId()); //This should print 1 
     System.out.println(student2.getId()); //This should print 2 

     //You may achieve the same result as follows: 
     Student student3 = new Student(); 
     student3.setId(3); 
     student3.setName("George"); 

     System.out.println(student3.getId()); //This should print 3 
    } 
} 
3

さて、あなたはあなたが持っているものの情報に基づいてオブジェクトをinsantiateする複数の方法を持っている場合であってもよいです。

このクラスのためには、いくつかの可能性があり:

Student4(int i,String n){ 
    this.id = i; 
    this.name = n; 
} 
Student4(int i) { 
    this.id = i; 
    this.name = ""; 
Student4(String n) 
    this.name = n; 
} 

これは、コンストラクタをオーバーロードと呼ばれています。

関連する問題