Presentation is loading. Please wait.

Presentation is loading. Please wait.

Chapter 4Java: an Introduction to Computer Science & Programming - Walter Savitch 1 Chapter 4 l Class and Method Definitions l Information Hiding and Encapsulation.

Similar presentations


Presentation on theme: "Chapter 4Java: an Introduction to Computer Science & Programming - Walter Savitch 1 Chapter 4 l Class and Method Definitions l Information Hiding and Encapsulation."— Presentation transcript:

1 Chapter 4Java: an Introduction to Computer Science & Programming - Walter Savitch 1 Chapter 4 l Class and Method Definitions l Information Hiding and Encapsulation l Objects and Reference l Parameter passing Classes, Objects, and Methods

2 Chapter 4Java: an Introduction to Computer Science & Programming - Walter Savitch 2 Learn by Doing l All programs in the book are available on the CD that comes with the book l It is a good idea to run the programs as you read about them Do not forget that you will need the SavitchIn.java file for keyboard input (for almost all book programs for a while)

3 Chapter 4Java: an Introduction to Computer Science & Programming - Walter Savitch 3 Classes in Java l Classes are used to define objects and provide methods to act on the objects l Since Java is a “pure” object-oriented language … »Our main program is also part of a class (we ignored that – but it was in the code that Forte put in for us). »The main program may declare objects and process them to solve the problem

4 Chapter 4Java: an Introduction to Computer Science & Programming - Walter Savitch 4 Classes l Class—definition of a kind of object l Like an outline or plan for constructing specific objects »see next slide or diagram in text l Example: an Automobile class »Object that satisfies the Automobile definition instantiates the Automobile class l Class specifies what kind of data objects of that class have »Each object has the same data items but can have different values l Class specifies what methods each object will have »All objects of the same class have the exact same methods

5 Chapter 4Java: an Introduction to Computer Science & Programming - Walter Savitch 5 Class as an Outline Class Name: Automobile Data: amount of fuel ________ speed ________ license plate ________ Methods (actions): increaseSpeed: How: Press on gas pedal. stop: How: Press on brake pedal. First Instantiation: Object name: patsCar amount of fuel: 10 gallons speed: 55 miles per hour license plate: “135 XJK” Second Instantiation: Object name: suesCar amount of fuel: 14 gallons speed: 0 miles per hour license plate: “SUES CAR” Third Instantiation: Object name: ronsCar amount of fuel: 2 gallons speed: 75 miles per hour license plate: “351 WLF” Class Definition Objects that are instantiations of the class

6 Chapter 4Java: an Introduction to Computer Science & Programming - Walter Savitch 6 Objects l Objects are variables that are named instances of a class »the class is their type l Objects have both data and methods l Both the data items and methods of a class are members of the object l Data items are also called fields or instance variables

7 Chapter 4Java: an Introduction to Computer Science & Programming - Walter Savitch 7 Another Example Class: Student l Data Items: name, SSN, year, major, … l Methods: register for a section, change major, … l Objects of the class: all of you l E.g. use in part of main Student student1 = new Student(); // create // find out student name etc // to register for a section: student1.register( …

8 Chapter 4Java: an Introduction to Computer Science & Programming - Walter Savitch 8 Objects in Use - syntax l In a program function (such as main), create objects l Syntax: class_Name instance_Name = new class_Name(); Note the keyword new – actually creates space in memory for instance variables l Invoking a method means to call the method, i.e. execute the method »Syntax for invoking an object's method (e.g. in main): the dot operator object_Variable_Name.method() »object_Variable_Name is the calling object

9 Chapter 4Java: an Introduction to Computer Science & Programming - Walter Savitch 9 Another Example Class: (Bank) Account l Data Items: account number, PIN, balance … l Methods: deposit, withdraw, … l Objects of the class: all individual accounts at the bank l E.g. (); // create Account myAccount = new Account(); // find out initial account info // to deposit money into myAccount: myAccount.deposit ( 100);

10 Chapter 4Java: an Introduction to Computer Science & Programming - Walter Savitch 10 Example: String Class String is a class »it stores a sequence of characters »its length method returns the number of characters l Example: read characters typed in by user from the keyboard and output the number of characters entered String userInput; userInput = SavitchIn.readLine(); System.out.println(userInput.length());

11 Chapter 4Java: an Introduction to Computer Science & Programming - Walter Savitch 11 Class Files l Each Java class definition should be a separate file l Use the same name for the class and the file, except add ".java" to the file name l Good programming practice: Start the class (and file) name a capital letter and capitalize inner words upper case »e.g. MyClass.java for the class MyClass l For now put all the classes you need to run a program in the same directory l When you compile, the bytecodes will be in a classname.class file »E.g. Student.java compiles into Student.class l

12 Chapter 4Java: an Introduction to Computer Science & Programming - Walter Savitch 12 Instance Variables SpeciesFirstTry class has three instance variables: name, population, and growthRate : public means that there are no restrictions on how these instance variables are used. Later we’ll see that these should be declared private instead of public. public String name; public int population; public double growthRate;

13 Chapter 4Java: an Introduction to Computer Science & Programming - Walter Savitch 13 Instance Variables Account class has three instance variables: acctNum, PIN, and balance : protected String acctNum; protected String PIN; protected double balance; protected means that there are restrictions on how these instance variables are used.

14 Chapter 4Java: an Introduction to Computer Science & Programming - Walter Savitch 14 Instantiating (Creating) Objects l Syntax: class_Name instance_Name = new class_Name(); Note the keyword new For example, the text defines a class named SpeciesFirstTry //instantiate an object of this class SpeciesFirstTry speciesOfTheMonth = new SpeciesFirstTry(); l Public instance variables can be accessed using the dot operator: SpeciesOfTheMonth.name = “Klingon ox”;

15 Chapter 4Java: an Introduction to Computer Science & Programming - Walter Savitch 15 Return Type of Methods l Some methods perform an action and return a single value l Some methods just perform an action (e.g. print a message or read in a value from the keyboard) and do not return a value l All methods must be defined with a return type l Return types may be: »a primitive data type, such as char, int, double, etc. »a class, such as String, SpeciesFirstTry, Account, Student, etc. »void if no value is returned

16 Chapter 4Java: an Introduction to Computer Science & Programming - Walter Savitch 16 Calling Methods You can use a method anyplace where it is legal to use its return type, for example the readLineInt() method of SavitchIn returns an integer, so this is legal: int next = SavitchIn.readLineInt(); l For methods that don’t return a value (void), putting the call on a line by itself is appropriate System.out.println(“This method is used for its action”); l Which do you think is legal to to the opposite on? l Does it make sense?

17 Chapter 4Java: an Introduction to Computer Science & Programming - Walter Savitch 17 Defining Methods l In Java, ALWAYS defined inside a class definition Methods that return a value must execute a return statement that includes the value to return l For example: public double getBal() { return balance; }

18 Chapter 4Java: an Introduction to Computer Science & Programming - Walter Savitch 18 More Interesting … l Using some of the capabilities we have been learning throughout the semester l public boolean withdraw(double amt) { // given an amount to withdraw if (amt <= 0) { System.out.println("PROGRAM ERROR - cannot withdraw a negative amount"); return false; } else if (amt > balance) { System.out.println("ERROR - cannot withdraw an amount more than in account"); return false; } else { // can withdraw balance = balance - amt; return true; }

19 Chapter 4Java: an Introduction to Computer Science & Programming - Walter Savitch 19 void Method Example The definition of the writeOutput method of SpeciesFirstTry : Assuming instance variables name, population, and growthRate have been defined and assigned values, this method performs an action (writes values to the screen) but does not return a value public void writeOutput() { System.out.println("Name = " + name); System.out.println("Population = " + population); System.out.println("Growth = " + growthRate + "%"); }

20 Chapter 4Java: an Introduction to Computer Science & Programming - Walter Savitch 20 Method and Class Naming Conventions Good Programming Practice l Use verbs to name void methods »they perform an action l Use nouns to name methods that return a value »they create (return) a piece of data, a thing l Start class names with a capital letter l Start method names with a lower case letter

21 Chapter 4Java: an Introduction to Computer Science & Programming - Walter Savitch 21 The main Method A class written to solve a problem (rather than define objects) is written as a class with one method, main Invoking the class name invokes the main method See the example: AccountDemo l Note the basic structure: public class AccountDemo { public static void main(String[] args) { } }

22 Chapter 4Java: an Introduction to Computer Science & Programming - Walter Savitch 22 The Reserved Word this The word this has a special meaning for objects l It is a reserved word, which means you should not use it as an identifier for a variable, class or method »other examples of reserved words are int, char, main, etc. this stands for the name of the calling object Java allows you to omit this. »It is automatically understood that an instance variable name without the keyword this refers to the calling object

23 Chapter 4Java: an Introduction to Computer Science & Programming - Walter Savitch 23 Example Using this Using an earlier example method, but including the keyword this : public double getBal() { return this.balance; } this refers to the name of the calling object that invoked the getBal method l E.g. double currBal = myAccount.getBal(); l Inside the method this stands in for myAccount You only NEED to use this in rare circumstances

24 Chapter 4Java: an Introduction to Computer Science & Programming - Walter Savitch 24 Local Variables and Blocks l A block (a compound statement) is the set of statements between a pair of matching braces (curly brackets) l A variable declared inside a block is known only inside that block »it is local to the block, therefore it is called a local variable »when the block finishes executing, local variables disappear »references to it outside the block cause a compile error

25 Chapter 4Java: an Introduction to Computer Science & Programming - Walter Savitch 25 Example l Suppose a Student class has a calcGPA method, which loops through all the finished courses on a student’s transcript and calculates the GPA public double calcGPA ( ) { double totalGradePts = 0; // this var is local to the method for (int cnt = 0; cnt < numbCourses; cnt++) { // cnt is local to the loop double currGradePt; // local to the loop … } // any reference to cnt or currGradePt out here would be an error … } l If any of these variables is declared and used in another method, that is legal BUT they are TOTALLY DIFFERENT variables (different memory locations, and different values)

26 Chapter 4Java: an Introduction to Computer Science & Programming - Walter Savitch 26 Local Variables and Blocks l Some programming languages (e.g. C and C++) allow the variable name to be reused outside the local block »it is confusing and not recommended, nevertheless, it is allowed l However, a variable name in Java can be declared only once for a method »although the variable does not exist outside the block, other blocks in the same method cannot reuse the variable's name

27 Chapter 4Java: an Introduction to Computer Science & Programming - Walter Savitch 27 When and Where to Declare Variables l Declaring variables outside all blocks but within the method definition makes them available within all the blocks Good programming Practice: l declare variables just before you use them – OR at start of method l initialize variables when you declare them l do not declare variables inside loops – unless there is a reason to »it takes time during execution to create and destroy variables, so it is better to do it just once for loops) it is ok to declare loop counters in the Initialization field of for loops, e.g. for(int i=0; i <10; i++)… »the Initialization field executes only once, when the for loop is first entered

28 Chapter 4Java: an Introduction to Computer Science & Programming - Walter Savitch 28 Passing Values to a Method: Parameters l Some methods can be more flexible (therefore useful) if we pass them input values l Input values for methods are called passed values or parameters l Parameters and their data types must be specified inside the parentheses of the heading in the method definition »these are called formal parameters l The calling object must put values of the same data type, in the same order, inside the parentheses of the method invocation »these are called arguments, or actual parameters

29 Chapter 4Java: an Introduction to Computer Science & Programming - Walter Savitch 29 Parameter Passing Example l Having a parameter makes this fuinction so much more useful than it otherwise would be (alternative example – “FastCash” – you can withdraw $60, no more, no less) l What is the formal parameter in the method definition? »amt l What is the argument (actual parameter) in the method invocation? »currBill l Lets look back at the withdraw method public boolean withdraw(double amt) { … l Invocation of the method... somewhere in main... haveMoney = myAcct.withdraw(currBill);

30 Chapter 4Java: an Introduction to Computer Science & Programming - Walter Savitch 30 Parameter Passing Example l What is the formal parameter in the method definition? »numberIn l What is the argument in the method invocation? »next //Definition of method to double an integer public int doubleValue(int numberIn) { return 2 * numberIn; } //Invocation of the method... somewhere in main...... int next = SavitchIn.readLineInt(); System.out.println("Twice next = " + doubleValue(next));

31 Chapter 4Java: an Introduction to Computer Science & Programming - Walter Savitch 31 OK – Let’s Solve a Problem l Let’s say that we are going to pay interest on the money in the accounts. Let’s have our main compare the difference between compounding daily vs compounding monthly. We will want to add a payInterest method to Account, and handle the rest in main. l Let’s start by defining the heading for the method »public double payInterest (int numDays)

32 Chapter 4Java: an Introduction to Computer Science & Programming - Walter Savitch 32 Let’s handle the part in main RevisedAccount testDaily = new RevisedAccount(); // could ask user for the initial amounts but just did the quick way for demo testDaily.setBal(5000); testDaily.setIntRate(0.02); // also need to set interest rate – something new RevisedAccount testMonthly = new RevisedAccount(); testMonthly.setBal(5000); testMonthly.setIntRate(0.02); // also need to set interest rate // how accurate do we want this? – lets do it approximately – // assume 30 days every month // do 12 months for (int mon = 0; mon < 12; mon++) { // do 30 days within the month for (int day = 0; day < 30; day++) { testDaily.payInterest(1); // unusual situation – don’t need the returned value } testMonthly.payInterest(30); // unusual situation - don't need the returned value } System.out.println("final balance with daily compounding is: " + testDaily.getBal()); System.out.println("final balance with monthly compounding is: "+testMonthly.getBal());

33 Chapter 4Java: an Introduction to Computer Science & Programming - Walter Savitch 33 Let’s look at the additions to Account l First, we need a new instance variable protected double intRate; // later in semester (chapt 7), we will do this in a better way l Second, we need a way of setting the interest rate void setIntRate (double rate) { intRate = rate; } // we can use this in main to set our interest rate l Third, we need payInterest public double payInterest (int numDays) { if (numDays <= 0) { System.out.println("ERROR - invalid number of days"); // no interest if no days or fewer return 0; } double intAmt = balance * (intRate * (numDays / 365.0)); balance += intAmt; return intAmt; }

34 Chapter 4Java: an Introduction to Computer Science & Programming - Walter Savitch 34 OK – Let’s Solve a Problem l Let’s say that we are going to pay interest on the money in the accounts. Let’s have our main compare the difference between compounding daily vs compounding monthly. We will want to add a payInterest method to Account, and handle the rest in main. l Let’s start by defining the heading for the method »public boolean payInterest (int numDays)

35 Chapter 4Java: an Introduction to Computer Science & Programming - Walter Savitch 35 Let’s handle the part in main Account testDaily = new Account(); testDaily.setBal(1000); // also need to set interest rate – something new for (int cnt = 0; cnt < 365; cnt++) { testDaily.payInterest(1); // unusual situation – don’t need the returned value } System.out.println(“final balance with daily compounding is: “ + testDaily.getBal()); // how accurate do we want this? – lets do it exactly Account testMonthly = new Account(); testMonthly.setBal(1000); // also need to set interest rate testMonthly.payInterest(31); testMonthly.payInterest(28); testMonthly.payInterest(31); testMonthly.payInterest(30); testMonthly.payInterest(31); testMonthly.payInterest(30); testMonthly.payInterest(31); testMonthly.payInterest(30); testMonthly.payInterest(31); testMonthly.payInterest(30); testMonthly.payInterest(31);

36 Chapter 4Java: an Introduction to Computer Science & Programming - Walter Savitch 36 Let’s look at the additions to Account l First, we need a new instance variable protected double intRate; // later in semester (chapt 7), we will do this in a better way l Second, we need a way of setting the interest rate void setIntRate (double rate) { intRate = rate; } // we can use this in main to set our interest rate l Third, we need payInterest public boolean payInterest (int numDays) { if (numDays <= 0) { System.out.println(“ERROR – invalid number of days”); return false; } double intAmt = balance * (intRate * (numDays / 365.0)); balance += intAmt; return true; }

37 Chapter 4Java: an Introduction to Computer Science & Programming - Walter Savitch 37 Pass-By-Value: Primitive Data Types as Parameters l When the method is called, the value of each argument is copied (assigned) to its corresponding formal parameter l The number of arguments must be the same as the number of formal parameters * l The data types of the arguments must be the same as the formal parameters and in the same order * l Formal parameters are initialized to the values passed l Formal parameters are local to their method l Variables used as arguments cannot be changed by the method »the method only gets a copy of the variable's value

38 Chapter 4Java: an Introduction to Computer Science & Programming - Walter Savitch 38 Information Hiding and Encapsulation Information hiding l protect data inside an object l do not allow direct access use private or protected modifier for instance variable declarations use public methods to access data »called accessor (or inspector) methods »Frequently named get… »Change data using mutator methods »Frequently named set… l Programmer can use any method without knowing details of instance variables or code for the method Encapsulation l In Java, use classes and objects l Objects include both data items and methods to act on the data l One way of doing info hiding Cornerstones of Object Oriented Programming (OOP) Both are forms of abstraction

39 Chapter 4Java: an Introduction to Computer Science & Programming - Walter Savitch 39 Formalized Abstraction: ADTs ADT: Abstract data type l An approach used by several languages including Object-Oriented languages l a container for both data items and methods to act on the data »In OO languages, supported by classes capability l Implements information hiding and encapsulation l Provides a public user interface so the user knows how to use the class »descriptions, parameters, and names of its methods l Implementation: »private instance variables »method definitions are usually public but always hidden from the user »the user cannot see or change the implementation »the user only sees the interface

40 Chapter 4Java: an Introduction to Computer Science & Programming - Walter Savitch 40 Do We Do Anything Special? In Java, Not really! Just create classes as previously described, except: l Do not give the user (programmer) the class definition file l Do give the user the interface - a file with just the class and method descriptions and headings »the headings give the names and parameters of the methods »documentation (comments describing methods) tells the user how to use the class and its methods ( need documentation!!!!!) »it is all the user needs to know Make sure you use the private modifier when declaring instance variables l Make sure you provide accessor and mutator functions for when the user (programmer) will need to get at or change data

41 Chapter 4Java: an Introduction to Computer Science & Programming - Walter Savitch 41 Gee this is extra work … l Going through accessor and mutator methods to get to instance variables is extra work – but it allows any checking for reasonableness to be located in one place l And it means that the class developer can change instance variables without the user programmer being affected (e.g. decide to just store birth date and skip storing age)

42 Chapter 4Java: an Introduction to Computer Science & Programming - Walter Savitch 42 Javadoc l Comes with Sun’s Java (which we have) l Automatically produces documentation describing the external interface for a class, ASSUMING that your comments follow a certain convention l Comments before each method in format : /** * Comments in here * The stars on these lines are not needed for Java, but are needed for * Javadoc * The begin comment symbols need at least one extra * (typically put a * whole line of them to make the comment stand out to humans */ l In Forte do this using menu choice – Tools\Generate JavaDoc l When working on team – the result could be what you give to your partner – to be helpful, but do info hiding to an extent

43 Chapter 4Java: an Introduction to Computer Science & Programming - Walter Savitch 43 /******************************************* * Class description * Preconditions (see the text) * Postconditions (see the text) ******************************************/ public class Class_Name { //Method definitions of the form /******************************** * Method description *******************************/ public returnType class Class_Name(type1 parmameter1,...) { } (some people like to put these up top) } Summary of Class Definition Syntax

44 Chapter 4Java: an Introduction to Computer Science & Programming - Walter Savitch 44 OK – Let’s Look at Another Possible Method l Balance transfer – Let’s dream up main code first // transfer from checking to savings myChecking.transfer(200, mySavings); l Let’s write the method public boolean transfer (double amt, Account toAcct) { if (amt < 0) { System.out.println(“ERROR”); return false; } if (amt > balance) { System.out.println(“ERROR”); return false; } balance = balance – amt; toAcct.deposit(amt); return true; }

45 Chapter 4Java: an Introduction to Computer Science & Programming - Walter Savitch 45 Variables: Class Type vs. Primitive Type What does a variable hold? »It depends on the type of type, primitive type or class type l A primitive type variable holds the value of the variable l Class types are more complicated »they have methods and instance variables l A class type variable holds the memory address of the object »the variable does not actually hold the value of the object »in fact, as stated above, objects generally do not have a single value and they also have methods, so it does not make sense to talk about its "value"

46 Chapter 4Java: an Introduction to Computer Science & Programming - Walter Savitch 46 Assignment with Variables of a Class Type Account orig = new Account(); orig.setAcctNum(“1234”); orig.setBal(1000); Account other = new Account(); other.setAcctNum(“7777”); other.setBal(0); other = orig; // this is start of the tricky part System.out.println(“other: “ + other.toString()); orig.deposit(100); // this is tricky too System.out.println(“orig: “ + orig.toString()); System.out.println(“other: “ + other.toString()); What will the output be? (see the next slide)

47 Chapter 4Java: an Introduction to Computer Science & Programming - Walter Savitch 47 Assignment with Variables of a Class Type klingon.set(“Klingon ox”, 10, 15); earth.set(“Black rhino”, 11, 2); earth = klingon; earth.set(“Elephant”, 100, 12); System.out.println(“earth:”); earth.writeOutput(); System.out.println(“klingon:”); klingon.writeOutput(); What will the output be? (see the next slide)

48 Chapter 4Java: an Introduction to Computer Science & Programming - Walter Savitch 48 Assignment with Variables of a Class Type Account orig = new Account(); orig.setAcctNum(“1234”); orig.setBal(1000); Account other = new Account(); other.setAcctNum(“7777”); other.setBal(0); other = orig; // this is start of the tricky part System.out.println(“other: “ + other.toString()); orig.deposit(100); // this is tricky too System.out.println(“orig: “ + orig.toString()); System.out.println(“other: “ + other.toString()); other: Acct: 1234 PIN: Bal: 1000 orig: Acct: 1234 PIN: Bal: 1100 other: Acct: 1234 PIN: Bal: 1100 What will the output be? orig and other both print the same thing!! Why do they print the same thing? (see the next slide)

49 Chapter 4Java: an Introduction to Computer Science & Programming - Walter Savitch 49 Assignment with Variables of a Class Type klingon.set(“Klingon ox”, 10, 15); earth.set(“Black rhino”, 11, 2); earth = klingon; earth.set(“Elephant”, 100, 12); System.out.println(“earth:”); earth.writeOutput(); System.out.println(“klingon:”); klingon.writeOutput(); earth: Name = Elephant Population = 100 Growth Rate = 12% klingon: Name = Elephant Population = 100 Growth Rate = 12% Output: What will the output be? klingon and earth both print elephant. Why do they print the same thing? (see the next slide)

50 Chapter 4Java: an Introduction to Computer Science & Programming - Walter Savitch 50 Assignment with Variables of a Class Type klingon.set(“Klingon ox”, 10, 15); earth.set(“Black rhino”, 11, 2); earth = klingon; earth.set(“Elephant”, 100, 12); System.out.println(“earth:”); earth.writeOutput(); System.out.println(“klingon:”); klingon.writeOutput(); Why do they print the same thing? The assignment statement makes earth and klingon refer to the same object. When earth is changed to “ Elephant ”, klingon is changed also. earth klingon Black rhino 11 2 Klingon ox 10 15 Before the assignment statement, earth and klingon refer to two different objects. earth klingon Klingon ox 10 15 After the assignment statement, earth and klingon refer to the same object.

51 Chapter 4Java: an Introduction to Computer Science & Programming - Walter Savitch 51 Assignment with Variables of a Class Type Account orig = new Account(); orig.setAcctNum(“1234”); orig.setBal(1000); Account other = new Account(); other.setAcctNum(“7777”); other.setBal(0); other = orig; // tricky part System.out.println(“other: “ + other.toString()); orig.deposit(100); // this is tricky too System.out.println(“orig: “ + orig.toString()); System.out.println(“other: “ + other.toString()); Why do they print the same thing? The assignment statement makes orig and other refer to the same object. When orig is changed via deposit, other is changed also. orig other “1234” “ 1000 “7777” “ 0 Before the assignment statement, orig and other refer to two different objects. orig other “1234” “ 1000 After the assignment statement, orig and other refer to the same object.

52 Chapter 4Java: an Introduction to Computer Science & Programming - Walter Savitch 52 Gotcha: Comparing Class Variables l A class variable returns a number, but it is not its value l It returns the memory address where the object with that variable name is stored If two class variables are compared using ==, it is the addresses, not the values that are compared! This is rarely what you want to do! Use the class's.equals() method to compare the values of class variables

53 Chapter 4Java: an Introduction to Computer Science & Programming - Walter Savitch 53 Example: Comparing Class Variables Use.equals method (not the double-equals sign) to compare values //User enters first string String firstLine = SavitchIn.readLine(); //User enters second string String secondLine = SavitchIn.readLine(); if(firstLine == secondLine) //this compares their addresses { } if(firstLine.equals(secondLine) //this compares their values { }

54 Chapter 4Java: an Introduction to Computer Science & Programming - Walter Savitch 54 Pass the Address: Class Types as Method Parameters l In the same way, class variable names used as parameters in a method call copy the argument's address (not the value) to the formal parameter l So the formal parameter name also contains the address of the argument l It is as if the formal parameter name is an alias for the argument name Any action taken on the formal parameter is actually taken on the original argument! l Unlike the situation with primitive types, the original argument is not protected for class types!

55 Chapter 4Java: an Introduction to Computer Science & Programming - Walter Savitch 55 Example: Class Type as a Method Parameter The method call makes otherObject an alias for s2, therefore the method acts on s2, the DemoSpecies object passed to the method! l This is unlike primitive types, where the passed variable cannot be changed. //Method definition with a DemoSpecies class parameter public void makeEqual(DemoSpecies otherObject) { otherObject.name = this.name; otherObject.population = this.population; otherObject.growthRate = this.growthRate; } //Method invocation DemoSpecies s1 = new DemoSpecies("Crepek", 10, 20); DemoSpecies s2 = new DemoSpecies(); s1.makeEqual(s2);

56 Chapter 4Java: an Introduction to Computer Science & Programming - Walter Savitch 56 Summary Part 1 l Classes have instance variables to store data and methods to perform actions l Declare instance variables to be private so they can be accessed only within the same class There are two kinds of methods: those that return a value and void -methods l Methods can have parameters of both primitive type and class type

57 Chapter 4Java: an Introduction to Computer Science & Programming - Walter Savitch 57 Summary Part 2 l Parameters of a primitive type work differently than those of a class type »primitive type parameters are call-by-value, so the calling object's variable is protected within the called method (the called method cannot change it) »class type parameters pass the address of the calling object so it is unprotected (the called method can change it) l For similar reasons, the operators = and == do not behave the same for class types as they do for primitive types (they operate on the address of object and not its values) Therefor you should usually define an equals method for classes you define (to allow the values of objects to be compared)


Download ppt "Chapter 4Java: an Introduction to Computer Science & Programming - Walter Savitch 1 Chapter 4 l Class and Method Definitions l Information Hiding and Encapsulation."

Similar presentations


Ads by Google