Starting Classes and MethodsObjects have behaviorsObjects have stateExample: a “Rabbit” objectClassesDefining a classDefining fieldsDefining constructorsParametersExample constructorExample use of a constructorA problem with namesSlide 13Slide 14this to the rescueA problem with names—solved!A typical use of thisDefining a methodReturning a result from a methodReturning no result from a methodSending messagesPutting it all togetherUsing our new classClasses form a hierarchyWhat is the class hierarchy for?Example of inheritanceClass variables and methodsWhy have class variables and methods?Example use of a class variableVocabulary IVocabulary IIVocabulary IIIVocabulary IVThe EndStarting Classes and MethodsObjects have behaviors•In old style programming, you had:–data, which was completely passive–functions, which could manipulate any data•In O-O programming, an object contains both data and methods that manipulate that data–An object is active, not passive; it does things–An object is responsible for its own data•But it can expose that data to other objectsObjects have state•An object contains data–The data represent the state of the object–Data can also describe the relationship of the object to other objects•Example: a checkingAccount might have–A balance (the internal state of the account)–An owner (some object representing a person)–An accountNumber (used as an ID number)Example: a “Rabbit” object•You could create an object representing a rabbit–It would have data:•How hungry it is•How healthy it is•Where it is–And methods:•eat, run, dig, hideClasses•A class describes a set of objects•The objects are called instances of the class•A class describes:–How to construct an object–What data (fields) are in each object–The methods (actions) the objects can perform•In addition, a class can have data and methods of its own (not part of the objects)Defining a class•Here is the simplest syntax for defining a class: class Name-of-class { // the fields (variables) of the object // the constructors for the object // the methods of the object}•You can put public, protected, or private before the word class•Things in a class can be in any order (above is best)Defining fields•An object’s data is stored in fields (also called instance variables)•The fields describe the state of the object•Fields are defined with ordinary variable declarations: String name;Double health;int age = 0;Defining constructors•A constructor is code to create an object•The syntax for a constructor is: ClassName(parameters) { …code…}•The ClassName has to be the same as the class that the constructor occurs in•The parameters are a comma-separated list of variable declarationsParameters•We need to give information to constructors and to methods•A parameter is a variable used to hold the incoming information•A parameter must have a name and a type•A parameter is given a value when you use the constructor or method•The parameter is only defined within the constructor or method in which it occursExample constructor public class Person { String name; int age; boolean male; Person (String aName, boolean isMale) { name = aName; male = isMale; }}Example use of a constructor•The constructor looks like: Person (String aName, boolean isMale) {…}–aName and isMale are called formal parameters•You can construct a new Person like this: Person john = new Person("John Smith", true);–"John Smith" and true are called actual parameters•You must have the same number of actual parameters as formal parameters, in the same order, and they must have the same typesA problem with names•It would be nice if we could say:–public class Person { String name; boolean male; Person (String name, boolean male) { name = name ; male = male ; }}A problem with names•And have it mean:–public class Person { String name; boolean male; Person (String name, boolean male) { name = name ; male = male ; }}A problem with names•But this is what it would really mean:–public class Person { String name; boolean male; Person (String name, boolean male) { name = name ; male = male ; }}this to the rescue•A parameter may have the same name as an instance variable–The name always refers to the parameter•The keyword this refers to the current object•Putting this in front of a name means that the name belongs to this object (it isn't a parameter)A problem with names—solved!•Here is how we do what we want:–public class Person { String name; boolean male; Person (String name, boolean male) { this.name = name ; this.male = male ; }}A typical use of this•If you write a constructor with parameters…•…and the parameters are used to set fields that have the same meaning…•…then use the same names! Person (String name, boolean male) { this.name = name ; this.male = male ; }Defining a method•A method has the syntax: return-type method-name ( parameters ) { method-variables code}•Example: boolean isAdult( ) { int magicAge = 21; return age >= magicAge;}Returning a result from a method•If a method is to return a result, it must specify the type of the result boolean isAdult ( …•You must use a return statement to exit the method with a result of the correct type: return age >= magicAge;•This is for methods only (constructors automatically return a result of the correct type)Returning no result from a method•The keyword void is used to indicate that a method doesn’t return a value void printAge( ) { System.out.println(name + " is " + age + " years old."); return;}Sending messages•We send a message to an object by:–Naming the object–Naming the method we want to use–Providing any needed actual parameters•Example: if (john.isAdult ()) { john.printAge(); }•john.isAdult() returns a value (subsequently used by the if statement)•john.printAge() does not return a valuePutting it all together class Person { // fields String name; int age; // constructor Person(String name) { this.name = name; age = 0; } // methods String getName() { return name; } void birthday() { age = age + 1; System.out.println( "Happy birthday!"); } }Using our new class Person john; john = new Person("John Smith"); System.out.print (john.getName()); System.out.println(" is having a birthday!"); john.birthday();Classes form a
View Full Document