You are on page 1of 18

Computer Programming-2

Lecture 6
Dr.Sara A.shehab
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All
rights reserved. 0132130807
1
Objects and Classes

Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All
rights reserved. 0132130807
2
Instance Variables, and Methods

✓ Instance variables belong to a specific instance.

✓ Instance methods are invoked by an instance of


the class.

Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All
rights reserved. 0132130807
3
Static Variables, Constants,and Methods
✓ Static variables are shared by all the instances of
the class.

Static methods are not tied to a specific object.


✓ Static constants are final variables shared by all
the instances of the class.

Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All
rights reserved. 0132130807
4
Static Variables, Constants,
and Methods, cont.

✓ To declare static variables, constants, and


methods, use the static modifier.

Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All
rights reserved. 0132130807
5
Static Variables, Constants,
and Methods, cont.
instantiate
circle1 Memory

radius = 1 1 radius After two Circle


Circle numberOfObjects = 2 objects were created,
numberOfObjects
radius: double is 2.
numberOfObjects: int
2 numberOfObjects
getNumberOfObjects(): int
+getArea(): double instantiate circle2

radius = 5 5 radius
UML Notation: numberOfObjects = 2
+: public variables or methods
underline: static variables or methods

Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All
rights reserved. 0132130807
6
Example of
Using Instance and Class Variables
and Method
✓ Objective: Demonstrate the roles of instance
and class variables and their uses.
✓ This example adds a class variable
numberOfObjects to track the number of
Circle objects created.

Circle2

TestCircle2 Run
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All
rights reserved. 0132130807
7
Visibility Modifiers and
Accessor/Mutator Methods
By default, the class, variable, or method can be
accessed by any class in the same package.
✓ public
The class, data, or method is visible to any class in any
package.

✓ private
The data or methods can be accessed only by the declaring
class.
✓ The get and set methods are used to read and modify private
properties.
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All
rights reserved. 0132130807
8
package p1; package p2;
public class C1 { public class C2 { public class C3 {
public int x; void aMethod() { void aMethod() {
int y; C1 o = new C1(); C1 o = new C1();
private int z; can access o.x; can access o.x;
can access o.y; cannot access o.y;
public void m1() { cannot access o.z; cannot access o.z;
}
void m2() { can invoke o.m1(); can invoke o.m1();
} can invoke o.m2(); cannot invoke o.m2();
private void m3() { cannot invoke o.m3(); cannot invoke o.m3();
} } }
} } }

package p1; package p2;


class C1 { public class C2 { public class C3 {
... can access C1 cannot access C1;
} } can access C2;
}

The private modifier restricts access to within a class, the default


modifier restricts access to within a package, and the public
modifier enables unrestricted access.
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All
rights reserved. 0132130807
9
NOTE
An object cannot access its private members, as shown in (b).
It is OK, however, if the object is declared in its own class, as
shown in (a).
public class Foo { public class Test {
private boolean x; public static void main(String[] args) {
Foo foo = new Foo();
public static void main(String[] args) { System.out.println(foo.x);
Foo foo = new Foo(); System.out.println(foo.convert(foo.x));
System.out.println(foo.x); }
System.out.println(foo.convert()); }
}

private int convert(boolean b) {


return x ? 1 : -1;
}
}
(b) This is wrong because x and convert are private in Foo.
(a) This is OK because object foo is used inside the Foo class

Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All
rights reserved. 0132130807
10
Why Data Fields Should Be
private?
To protect data.

To make class easy to maintain.

Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All
rights reserved. 0132130807
11
Example of
Data Field Encapsulation
Circle
The - sign indicates
private modifier -radius: double The radius of this circle (default: 1.0).
-numberOfObjects: int The number of circle objects created.

+Circle() Constructs a default circle object.


+Circle(radius: double) Constructs a circle object with the specified radius.
+getRadius(): double Returns the radius of this circle.
+setRadius(radius: double): void Sets a new radius for this circle.
+getNumberOfObject(): int Returns the number of circle objects created.
+getArea(): double Returns the area of this circle.

Circle3 TestCircle3 Run


Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All
rights reserved. 0132130807
12
Passing Objects to Methods

✓ Passing by value for primitive type value


(the value is passed to the parameter)
✓ Passing by value for reference type value
(the value is the reference to the object)

TestPassObject Run

Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All
rights reserved. 0132130807
13
Passing Objects to Methods, cont.

Stack Pass by value (here


the value is 5)
Space required for the
printAreas method Pass by value
int times: 5 (here the value is
Circle c: reference the reference for
the object) Heap
Space required for the
main method
int n: 5 A circle
myCircle: reference object

Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All
rights reserved. 0132130807
14
Array of Objects
Circle[] circleArray = new Circle[10];
✓ An array of objects is actually an array of
reference variables.
✓ So invoking circleArray[1].getArea()
involves two levels of referencing as
shown in the next figure.
✓ circleArray references to the entire array.
circleArray[1] references to a Circle
object.
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All
rights reserved. 0132130807
15
Array of Objects, cont.
Circle[] circleArray = new Circle[10];

circleArray reference circleArray[0] Circle object 0


circleArray[1]

… Circle object 1

circleArray[9] Circle object 9

Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All
rights reserved. 0132130807
16
Array of Objects, cont.
Summarizing the areas of the circles

TotalArea Run
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All
rights reserved. 0132130807
17
Liang, Introduction to Java Programming, Eighth Edition, (c) 2011 Pearson Education, Inc. All
rights reserved. 0132130807

You might also like