2014-03-27 26 views
0

似乎我們被迫使用用戶定義的構造函數(如果已定義了構造函數並且無法使用已提供的默認構造函數)。如果存在用戶定義的構造函數,則無法使用默認構造函數

我可以做到這一點(默認構造函數),如果沒有設置用戶定義的構造

Student s = new student() ; 

一旦用戶定義的構造已被提供,我不能不再做,這不同於C++,其中i仍然可以使用提供的代碼

樣品在那裏我定義的構造函數的構造,無法做到Student s = new student()

package javaapplication1; 
import java.util.*; 
import java.io.*; 
import java.lang.*; 


public class JavaApplication1 
{ 

    public static void main(String[] args) 
    { 
     Student s = new Student(); // will get compiler error 

     System.out.println(s.getname()); 


    } 

    public static class Student 
{ 
    private String name; 
    private int mark; 

    public Student(String namevalue , int markvalue) // user defined constructor 
    { 
     name = namevalue; 
     mark = markvalue; 
    } 
    public String getname() 
    { 
     return name; 
    } 
    public void setname(String value) 
    { 
     name = value; 
    } 

} 

} 

我的分析是否正確,爲什麼這樣?

+2

如果您定義了自己的構造函數,則沒有提供默認構造函數。 –

+2

C++具有相同的行爲! –

回答

4

您需要明白,如果您未能提供自己的構造函數,則默認構造函數僅由Java編譯器提供。你做的那一刻,你也需要提供一個無參數的構造函數。這對新程序員來說很混亂,但如果你仔細想想它真的很有意義 - 你真的想讓Java爲你創造一些事情嗎?

+0

謝謝Sotirios清理我的答案:) – Ewald

1

如果您想使用Student s = new student() ;,只需在您的Stundent類中定義第二個構造函數,無參數: public Student() { }

0

行爲是有很好的理由。

如果您想防止開發人員意外創建沒有名稱和標記的學生,該怎麼辦?如果Java總是添加自己的構造函數,無論您編寫的任何構造函數如何,您都無法做到這一點。

相關問題