Heads up! To view this whole video, sign in with your Courses account or enroll in your free 7-day trial. Sign In Enroll
Preview
Start a free Courses trial
to watch this video
We can set the values of an object's fields to an initial value when it's created.
Related Discussions
Have questions about this video? Start a discussion with the community and Treehouse staff.
Sign upRelated Discussions
Have questions about this video? Start a discussion with the community and Treehouse staff.
Sign up
A map without both width and
height isn't very useful.
0:00
We can make sure that both of these fields
are filled out when the object is created
0:04
by providing a special kind of
method called a constructor method.
0:09
They're called constructors
because they're used to construct
0:13
new instances of a class.
0:17
Let me show you what that looks like here.
0:20
Constructor methods are named
the same as the class they're in.
0:22
The constructor is called
when the object is created.
0:29
If we add parameters to the constructor
method, then the user of this class
0:32
must provide those parameters in order for
the object to be constructed.
0:37
We want the user to specify
both the width and a height, so
0:41
we'll add parameters for width and height.
0:44
Now we need to use these parameters
to initialize the fields.
0:48
We do that in the body of the method.
0:52
The Width and
Height fields that were declared up here
1:02
are called instant variables because
they exist as long as the object exists.
1:05
The variables width and height here,
with all lowercase letters,
1:11
are called method level variables, because
they only exist inside this method.
1:15
That's the variable scope.
1:21
We can only use these variables
inside this method, but
1:24
these instance variables here can be used
by other methods, and even other classes.
1:28
Again naming conventions
determine how we name variables.
1:34
It's standard practice to
name method parameters and
1:38
method level variables starting
with the lower case letter.
1:41
Methods and public instance
variables have an uppercase letter.
1:44
Check the teacher's notes for
a list of naming conventions.
1:49
The primary purpose of a constructor
is to initialize the object's
1:53
fields with some initial values.
1:57
One question we should ask ourselves when
working with fields and constructors is,
1:59
should the values of the fields be able to
change after the object is constructed?
2:05
In our case it doesn't make sense for
2:10
the size of the map to change
after we've created it.
2:12
We can make sure that
the user of this class
2:16
doesn't accidentally change the values
by making these fields read only.
2:19
We do that by putting
the read only keyword here.
2:24
So now a map must have both a width and
a height.
2:35
And the width and the height
cannot change after it's created.
2:39
We've accomplished this by
adding a constructor and
2:43
using the read-only modifier.
2:47
You'll notice that constructors
don't have return types.
2:49
They're only used to
initialize the object.
2:53
And they don't return anything.
2:55
Usually if a method doesn't return
anything we would type void here
2:57
just to the left of the method name.
3:02
Remember the void keyword means that
the method doesn't return anything.
3:05
We don't do that on
constructor methods though,
3:09
because constructors
can't return anything.
3:12
We do need to do one more thing
before we can use our constructor.
3:16
We need to make it public, just like we
did with the width and height fields.
3:20
This allows other classes to construct
a map using this constructor.
3:25
Let's go back to the game class now,
3:31
to see how to use this
constructor to create an object.
3:33
Before we make any changes,
let's try to compile the code as it is.
3:37
So I'll open up the Console window.
3:42
And type mcs
3:46
-out:TreehouseDefense.exe*.cs.
3:50
We can see how the compiler enforces
the new rules that we've established for
4:01
the map class.
4:05
We're getting the first error
because we didn't pass in two
4:07
arguments to the constructor.
4:10
We can add those arguments
here between these parentheses
4:12
where we're creating a new map object.
4:15
Let's initialize our map with
a width of 8 and a height of 5.
4:17
This resolves the first error.
4:22
The other two errors are happening because
we tried to assign values to width and
4:24
height after the object was created.
4:29
This is no longer permissible because
we made both of these fields read only.
4:32
We initialize these fields
in the constructor instead.
4:37
So we can remove these two lines.
4:41
We can still read the values of width and
height though.
4:43
So this line, where we calculate the area,
is perfectly legal.
4:47
Let's compile again to make sure
we're following our new rules.
4:51
Excellent.
4:58
If we had broken any rules,
4:59
we'd see compiler errors here
instead of just this warning.
5:01
The map class is starting to
define what it means to be a map.
5:06
We'll add even more to this
class in the next video.
5:10
You need to sign up for Treehouse in order to download course files.
Sign upYou need to sign up for Treehouse in order to set up Workspace
Sign up