Despite Java tutorials, Wikipedia searches, stackoverflow trolling, and hours of reading code samples, constructors still confuse the crap out of me. I’ve got three related questions that I’ve been trying to answer to help ME understand constructors a little better.
First, I’ve been under the impression that constructors need to be named the same as their classes. Consider:
public class Money {
public Money(long l) {
this.value = l;
}
public Money(String s) {
this.value = toLong(s);
}
public long getLong() {
return this.value;
}
public String getString() {
return toString(this.value);
}
}
I see this as four constructors…correct? So it appears that constructors not named the same as the class which contains them allowable. Can someone confirm that?
Second, I seem to have a block against understanding the set and get methods. Consider:
public class GetSetSample {
public int getFoo() {
return int Foo;
}
public void setFoo(int fooValue) {
int Foo = fooValue;
}
}
Why can’t I just do this:
public class getFoo(int fooValue){
foo=fooValue;
}
and use foo = getFoo(12) from some other class/method?
The third question is a little more esoteric, but will help me conceive of the bigger picture…which is my learning style, and conducive to my ability to trace program flow when debugging. The get and set methods suggest a “to” and “from” relationship to me. e.g., Passing a value “to” a constructor, receiving the result “from” the get method. It seems to me though that the “to” and “from” will change depending on your perspective. I think that any setMethod is setting parameters for an object, even though the variable comes FROM another class or method, and the GetMethod is getting the resulting object (say, this.foo) with the appropriately set parameter. No matter where the get or set is used, in a main method or a standalone class with a single constructor, ‘set’ is always associated with sending a parameter and get is always associated with receiving an object with that parameter. Is that a good understanding? or am I missing a vital part?
Question 1:
No, that class has two constructors and two methods. (
getLongandgetStringare the methods.)Question 2:
Well, that’s trying to declare a class with parameters, and also you’re setting a value in a get method, which would be extremely weird. It’s not clear what you’re trying to achieve here, but that code is thoroughly invalid.
Question 3:
Well it’s not really a relationship IMO. A relationship suggests something longer term than either of these methods. A setter typically changes the state of an object in some way, and a getter typically just returns some aspect of the state of an object. It’s not really clear what the rest of your explanation meant, because you’re playing somewhat fast and loose with terminology. For example: "
getis always associated with receiving an object with that parameter" doesn’t really make sense to me. Objects don’t have parameters, methods/constructors do – and getters can fetch primitive values or references…I suspect you would benefit from reading the "Classes" part of the Java tutorial, which talks about constructors and methods.