Sylvester
Sylvester

Reputation: 125

Calling a Constructor without parameters

I am trying to build a class with a constructor, mutators and accessors. Reading through books and online, I am made to learn that you can call a constructor with or without parameters. However, my case below seems not to work. I am not even able to compile without errors. It works when I use student jane = new student(""). What am I doing wrong?

Devolution.java:6: cannot find symbol
symbol  : constructor student()
location: class Governor
        student jane = new student();
                         ^
public class designers {

   public static void main(String[] args) { 

    student jane = new student();
    student smith = new student("jane", "36365355", "Nairobi", "Male");

    System.out.println("Janes's Properties: "+jane.name() + " " + jane.nationalID() + " " + jane.county()+"  "+jane.gender());
    System.out.println("Smith's Properties: "+smith.name() + " " + smith.nationalID() + " " + smith.county()+"  "+smith.gender());

   }    
 } 

other code is below

public class student {

   //Private fields
   private String name;
   private String nationalID;
   private String county;
   private String gender;   

   //Constructor method
   public student(String name, String nationalID, String county, String gender)
   {
     this.name = name;
     this.nationalID = nationalID;
     this.county = county;
     this.gender = gender;

   }

   //Accessor for name
   public String name()
   {
     return name;
   }

   //Accessor for nationalID
   public String nationalID()
   {
     return nationalID;
   }

   //Accessor for county
   public String county()
   {
     return county;
   }

    //Accessor for gender
   public String gender()
   {
     return gender;
   }

 }

Upvotes: 1

Views: 37673

Answers (6)

Patricia
Patricia

Reputation: 2865

You don't have a constructor without parameters. That would only be the case when you had not write an own one. When you want to have the possibility to make an object of the class with or without parameters, you need two different constructors in your code.

Upvotes: 0

chiastic-security
chiastic-security

Reputation: 20520

A constructor is a way of creating an instance of a class:

Student s = new Student(...);

will create a new instance of the Student class and enable you to access it using s.

Often, when you create an instance of a class, you need to specify certain information that's used in building the instance. In the case of a student, that might be the name, the age, and so on. You'd have a constructor that looks like this:

public Student(String name, int age) {
    //...
}

But in some contexts, you can build an instance of a class without needing (at least initially) to specify anything. So you might, for instance, have a constructor like this

public Student() {
    //...
}

which leaves the name and age fields blank or zeroed out, until you later set them with another method of the class.

The critical point for what you're doing is that you've made a constructor that requires various parameters, but you haven't specified one like this second example that doesn't require any. As things stand, you can write

Student s = new Student("Bob", "ABC12345", "Surrey", "Male");

because you've got a constructor that takes four Strings as arguments. But you can't write

Student s = new Student();

because you didn't create a constructor that takes no arguments.

The slight wrinkle in this is that if you don't specify any constructors in your class, then Java will automatically create one for you that takes no arguments and doesn't do anything special. So if you don't write any constructors, you'll get one for free that looks like this:

public Student() {
}

But that's only if you don't write any of your own. Since you've specified one that does take parameters, Java won't give you a no-argument one for free. You have to put it in yourself if you want to be able to create instances without any arguments.

Upvotes: 6

frost287
frost287

Reputation: 81

Its called overloading the constructor. In your class, declare a constructor again without parameter requirements. See this post for more info

Upvotes: 1

Eran
Eran

Reputation: 393771

You don't have a constuctor without parameters in the student class. Such a constructor is generated by the compiler only if you haven't defined any other constructors, which you have.

Just add the constructor :

   public student()
   {
       this.name = null;
       this.nationalID = null;
       this.county = null;
       this.gender = null;
   }

Upvotes: 3

Dawood ibn Kareem
Dawood ibn Kareem

Reputation: 79808

You've only written one constructor - the one with four parameters. You don't have a constructor without parameters, so you can't write new student().

Note that if you don't write any constructors at all, the compiler will automatically make a constructor for you, without parameters, but as soon as you write one constructor, this doesn't happen.

By the way, most people use capital letters for class names (so Student, not student). This makes it easy to distinguish them from the names of other identifiers. It would be good for you to get into the habit of doing the same.

Upvotes: 3

Nabin
Nabin

Reputation: 11776

You need to make another constructor as follow:

public Student(){
//do things here
}

Explanation:

When no constructors are defined in a class then there is a default constructor(without any parameters) already. In which case you don't need to define it. But if you have any constructor with some parameters, then you need to define the constructor without parameters as well.

Upvotes: 1

Related Questions