chapter 6 objects and classes
Post on 05-Jan-2016
65 Views
Preview:
DESCRIPTION
TRANSCRIPT
Liang,Introduction to Java Programming,revised by Dai-kaiyu1
Chapter 6 Objects and Classes
Prerequisites for Part II
Chapter 6 Objects and Classes
Chapter 7 Strings
Chapter 8 Inheritance and Polymorphism
Chapter 5 Arrays
Chapter 9 Abstract Classes and Interfaces
Chapter 10 Object-Oriented Modeling
Chapter 11 Getting Started with GUI Programming
Chapter 12 Event-Driven Programming
Chapter 15 Exceptions and Assertions
Chapter 16 Simple Input and Output
You can cover Exceptions and I/O after Chapter 8
You can cover GUI after Chapter 8
She calls out to the man on the streetSir can you help me…
Oh think twiceIt's another day for you and me In paradise…
Liang,Introduction to Java Programming,revised by Dai-kaiyu2
Objectives To understand objects and classes and use classes to model objects (§6.2). To learn how to declare a class and how to create an object of a class (§6.3). To understand the roles of constructors and use constructors to create objects
(§6.3). To use UML graphical notations to describe classes and objects (§6.3). To distinguish between object reference variables and primitive data type variables
(§6.4). To use classes in the Java library (§6.5). To declare private data fields with appropriate get and set methods to make class
easy to maintain (§6.6-6.8). To develop methods with object arguments (§6.9). To understand the difference between instance and static variables and methods
(§6.10). To determine the scope of variables in the context of a class (§6.11). To use the keyword this as the reference to the current object that invokes the
instance method (§6.12). To store and process objects in arrays (§6.13). To apply class abstraction to develop software (§6.14). To declare inner classes (§6.17).
Liang,Introduction to Java Programming,revised by Dai-kaiyu3
OO Programming Concepts
Object Oriented Programming (OOP) Encapsulates data (attributes) and methods
(behaviors) Objects: An object represents an entity in the real world
that can be distinctly identified
Allows objects to communicate Well-defined interfaces
Liang,Introduction to Java Programming,revised by Dai-kaiyu4
OO Programming Concepts
Procedural programming language C is an example Action-oriented Functions are units of programming
Object-oriented programming language Java is an example Object-oriented Classes are units of programming
Functions, or methods, are encapsulated in classes
Liang,Introduction to Java Programming,revised by Dai-kaiyu5
OO Programming Concepts
Procedural programming language
Object-oriented programming language
Object + messaging
algrithom + data structure
Liang,Introduction to Java Programming,revised by Dai-kaiyu6
OO Programming Concepts
Class Programmer-defined type Instance variable + method
Object is the instance of the Class System analysis-Class->Object This section discusses
How to create objects How to use objects
OBP Vs. OOP
Liang,Introduction to Java Programming,revised by Dai-kaiyu7
Objects
data field 1
method n
data field m
method 1
(A) A generic object
...
...
State (Properties)
Behavior
radius = 5
findArea()
Data field, State Properties
Method, Behavior
(B) An example of circle object
An object has a unique identity, state, and behaviors. The state of an object consists of a set of data fields (also known as properties) with their current values. The behavior of an object is defined by a set of methods.
Liang,Introduction to Java Programming,revised by Dai-kaiyu8
Classes Every Java class must extend another class
If class does not explicitly extend another class ,it extends java.lang.Object
class implicitly extends Object(11 methods definded in it)
Class constructor Same name as class Initializes instance variables of a class object Called when program instantiates an object of that class Can take arguments, but cannot return data types (“void”
can’t either) A constructor with no parameters is referred to as a no-arg
constructor. Class can have several constructors, through overloading
Liang,Introduction to Java Programming,revised by Dai-kaiyu9
Classes class Circle {
/** The radius of this circle */ double radius = 1.0; /** Construct a circle object */ Circle() { } /** Construct a circle object */ Circle(double newRadius) { radius = newRadius; } /** Return the area of this circle */ double findArea() { return radius * radius * 3.14159; }
}
Data field
Method
Constructors
Without main()
Liang,Introduction to Java Programming,revised by Dai-kaiyu10
Constructors
Circle() {}
Circle(double newRadius) { radius = newRadius;}
Constructors are a special kind of methods that are invoked to construct objects.
What if there is void
Demo Circle.java
Liang,Introduction to Java Programming,revised by Dai-kaiyu11
Creating Objects Using Constructors
new ClassName();
Example:new Circle();
new Circle(5.0);
Liang,Introduction to Java Programming,revised by Dai-kaiyu12
Default Constructor
A class may be declared without constructors. In this case, a no-arg constructor with an empty body is implicitly declared in the class. This constructor, called a default constructor, is provided automatically only if no constructors are explicitly declared in the class.
Liang,Introduction to Java Programming,revised by Dai-kaiyu13
Constructing Objects, cont.
circle1: Circle
radius = 2
new Circle()
circlen: Circle
radius = 5
new Circle()
...
UML Graphical notation for classes
UML Graphical notation for objects
Circle
radius: double
findArea(): double
UML Graphical notation for fields
UML Graphical notation for methods
Liang,Introduction to Java Programming,revised by Dai-kaiyu14
Declaring Object Reference Variables
To reference an object, assign the object to a reference variable.
To declare a reference variable, use the syntax:
ClassName objectRefVar;
Example:Circle myCircle;
Liang,Introduction to Java Programming,revised by Dai-kaiyu15
Declaring/Creating Objectsin a Single Step
ClassName objectRefVar = new ClassName();
Example: Circle myCircle = new Circle();
Create an objectAssign object reference
Liang,Introduction to Java Programming,revised by Dai-kaiyu16
Accessing Objects
Referencing the object’s data:
objectRefVar.data
e.g., myCircle.radius
Invoking the object’s method:
objectRefVar.methodName(arguments)
e.g., myCircle.findArea()
Liang,Introduction to Java Programming,revised by Dai-kaiyu17
Example 6.1 Using Objects
Objective: Demonstrate creating objects, accessing data, and using methods.
TestSimpleCircleTestSimpleCircle RunRun
Liang,Introduction to Java Programming,revised by Dai-kaiyu18
Trace Code
Circle myCircle = new Circle(5.0);
SCircle yourCircle = new Circle();
yourCircle.radius = 100;
Declare myCircle
no valuemyCircle
Liang,Introduction to Java Programming,revised by Dai-kaiyu19
Trace Code, cont.
Circle myCircle = new Circle(5.0);
Circle yourCircle = new Circle();
yourCircle.radius = 100; : Circle radius: 5.0
no valuemyCircle
Create a circle
Liang,Introduction to Java Programming,revised by Dai-kaiyu20
Trace Code, cont.
Circle myCircle = new Circle(5.0);
Circle yourCircle = new Circle();
yourCircle.radius = 100; : Circle radius: 5.0
reference valuemyCircle
Assign object reference to myCircle
Liang,Introduction to Java Programming,revised by Dai-kaiyu21
Trace Code, cont.
Circle myCircle = new Circle(5.0);
Circle yourCircle = new Circle();
yourCircle.radius = 100; : Circle radius: 5.0
reference valuemyCircle
no valueyourCircle
Declare yourCircle
Liang,Introduction to Java Programming,revised by Dai-kaiyu22
Trace Code, cont.
Circle myCircle = new Circle(5.0);
Circle yourCircle = new Circle();
yourCircle.radius = 100; : Circle radius: 5.0
reference valuemyCircle
no valueyourCircle
: Circle radius: 0.0
Create a new Circle object
Liang,Introduction to Java Programming,revised by Dai-kaiyu23
Trace Code, cont.
Circle myCircle = new Circle(5.0);
Circle yourCircle = new Circle();
yourCircle.radius = 100; : Circle radius: 5.0
reference valuemyCircle
reference valueyourCircle
: Circle radius: 0.0
Assign object reference to yourCircle
Liang,Introduction to Java Programming,revised by Dai-kaiyu24
Trace Code, cont.
Circle myCircle = new Circle(5.0);
Circle yourCircle = new Circle();
yourCircle.radius = 100; : Circle radius: 5.0
reference valuemyCircle
reference valueyourCircle
: Circle radius: 100.0
Change radius in
yourCircle
Liang,Introduction to Java Programming,revised by Dai-kaiyu25
See Objects in JBuilder Debugger
You can view the contents of an object in the debugger.
myCircle
yourCircle
JBuilder Optional
Liang,Introduction to Java Programming,revised by Dai-kaiyu26
Caution
Recall that you use Math.methodName(arguments) (e.g., Math.pow(3, 2.5))
to invoke a method in the Math class.
You can ‘t invoke findArea() using SimpleCircle.findArea. findArea() is non-static. It must be invoked from an object using
objectRefVar.methodName(arguments) (e.g., myCircle.findArea()).
More explanations will be given in Section 6.7, “Static Variables, Constants, and Methods.”
Liang,Introduction to Java Programming,revised by Dai-kaiyu27
The null Value
If a variable of a reference type does not reference any object, the variable holds a special literal value, null.
Reference an object that has not been created would cause a runtime NullPointerException.
Liang,Introduction to Java Programming,revised by Dai-kaiyu28
Default Value for a Data Field
The default value of a data field is null for a reference type 0 for a numeric typefalse for a boolean type '\u0000' for a char type.
Java assigns no default value to a local variable inside a method.
Liang,Introduction to Java Programming,revised by Dai-kaiyu29
Examplepublic class Student {
String name; // name has default value null
int age; // age has default value 0
boolean isScienceMajor; // isScienceMajor has default value false
char gender; // c has default value '\u0000'
public static void main(String[] args) {
Student student = new Student();
System.out.println("name? " + student.name);
System.out.println("age? " + student.age);
System.out.println("isScienceMajor? " + student.isScienceMajor);
System.out.println("gender? " + student.gender);
}
}
Liang,Introduction to Java Programming,revised by Dai-kaiyu30
Examplepublic class Test { public static void main(String[] args) { int x; // x has no default value String y; // y has no default value System.out.println("x is " + x); System.out.println("y is " + y); }}
Compilation error: variables not initialized
Liang,Introduction to Java Programming,revised by Dai-kaiyu31
Differences between Variables of Primitive Data Types and Object Types
1 Primitive type int i = 1 i
Object type Circle c c reference
Created using new Circle()
c: Circle
radius = 1
Liang,Introduction to Java Programming,revised by Dai-kaiyu32
Copying Variables of Primitive Data Types and Object Types
1
c1: Circle
radius = 5
Primitive type assignmenti = j
Before:
i
2j
2
After:
i
2j
Object type assignmentc1 = c2
Before:
c1
c2
After:
c1
c2
c2: Circle
radius = 9
Liang,Introduction to Java Programming,revised by Dai-kaiyu33
Garbage Collection
As shown in the previous figure, after the assignment statement c1 = c2, c1 points to the same object referenced by c2. The object previously referenced by c1 is no longer useful. This object is known as garbage. Garbage is automatically collected by JVM.
Liang,Introduction to Java Programming,revised by Dai-kaiyu34
Garbage Collection, cont
TIP: If you know that an object is no longer needed, you can explicitly assign null to a reference variable for the object. The Java VM will automatically collect the space if the object is not referenced by any variable.
Liang,Introduction to Java Programming,revised by Dai-kaiyu35
Using Classes from the Java Library
Example 6.1 declared the SimpleCircle class and created objects from the class. Often you will use the classes in the Java library to develop programs. You learned to obtain the current time using System.currentTimeMillis() in Example 2.5, “Displaying Current Time.” You used the division and remainder operators to extract current second, minute, and hour.
Liang,Introduction to Java Programming,revised by Dai-kaiyu36
The Date Class
Java provides a system-independent encapsulation of date and time in the java.util.Date class. You can use the Date class to create an instance for the current date and time and use its toString method to return the date and time as a string. For example, the following code
java.util.Date date = new java.util.Date();System.out.println(date.toString());
displays a string like Sun Mar 09 13:50:19 EST 2003.
Liang,Introduction to Java Programming,revised by Dai-kaiyu37
Using the JFrame Class
Objective: Demonstrate using classes from the Java library. Use the JFrame class in the javax.swing package to create two frames; use the methods in the JFrame class to set the title, size and location of the frames and to display the frames.
TestFrameTestFrame RunRun
Liang,Introduction to Java Programming,revised by Dai-kaiyu38
Trace Code
JFrame frame1 = new JFrame(); frame1.setTitle("Window 1"); frame1.setSize(200, 150); frame1.setVisible(true); JFrame frame2 = new JFrame(); frame2.setTitle("Window 2"); frame2.setSize(200, 150); frame2.setVisible(true);
Declare, create, and assign in one
statementreferenceframe1
: JFrametitle: width:height:visible:
Liang,Introduction to Java Programming,revised by Dai-kaiyu39
Trace Code
JFrame frame1 = new JFrame(); frame1.setTitle("Window 1"); frame1.setSize(200, 150); frame1.setVisible(true); JFrame frame2 = new JFrame(); frame2.setTitle("Window 2"); frame2.setSize(200, 150); frame2.setVisible(true);
referenceframe1
: JFrametitle: "Window 1"width:height:visible:
Set title property
Liang,Introduction to Java Programming,revised by Dai-kaiyu40
Trace Code
JFrame frame1 = new JFrame(); frame1.setTitle("Window 1"); frame1.setSize(200, 150); frame1.setVisible(true); JFrame frame2 = new JFrame(); frame2.setTitle("Window 2"); frame2.setSize(200, 150); frame2.setVisible(true);
referenceframe1
: JFrametitle: "Window 1"width: 200height: 150visible:
Set size property
Liang,Introduction to Java Programming,revised by Dai-kaiyu41
Trace Code
JFrame frame1 = new JFrame(); frame1.setTitle("Window 1"); frame1.setSize(200, 150); frame1.setVisible(true); JFrame frame2 = new JFrame(); frame2.setTitle("Window 2"); frame2.setSize(200, 150); frame2.setVisible(true);
referenceframe1
: JFrametitle: "Window 1"width: 200height: 150visible: true
Set visible property
Liang,Introduction to Java Programming,revised by Dai-kaiyu42
Trace Code
JFrame frame1 = new JFrame(); frame1.setTitle("Window 1"); frame1.setSize(200, 150); frame1.setVisible(true); JFrame frame2 = new JFrame(); frame2.setTitle("Window 2"); frame2.setSize(200, 150); frame2.setVisible(true);
referenceframe1
: JFrametitle: "Window 1"width: 200height: 150visible: true
Declare, create, and assign in one
statementreferenceframe2
: JFrametitle:width:height:visible:
Liang,Introduction to Java Programming,revised by Dai-kaiyu43
Trace Code
JFrame frame1 = new JFrame(); frame1.setTitle("Window 1"); frame1.setSize(200, 150); frame1.setVisible(true); JFrame frame2 = new JFrame(); frame2.setTitle("Window 2"); frame2.setSize(200, 150); frame2.setVisible(true);
referenceframe1
: JFrametitle: "Window 1"width: 200height: 150visible: true
referenceframe2
: JFrametitle: "Window 2"width:height:visible:
Set title property
Liang,Introduction to Java Programming,revised by Dai-kaiyu44
Trace Code
JFrame frame1 = new JFrame(); frame1.setTitle("Window 1"); frame1.setSize(200, 150); frame1.setVisible(true); JFrame frame2 = new JFrame(); frame2.setTitle("Window 2"); frame2.setSize(200, 150); frame2.setVisible(true);
referenceframe1
: JFrametitle: "Window 1"width: 200height: 150visible: true
referenceframe2
: JFrametitle: "Window 2"width: 200height: 150visible:
Set size property
Liang,Introduction to Java Programming,revised by Dai-kaiyu45
Trace Code
JFrame frame1 = new JFrame(); frame1.setTitle("Window 1"); frame1.setSize(200, 150); frame1.setVisible(true); JFrame frame2 = new JFrame(); frame2.setTitle("Window 2"); frame2.setSize(200, 150); frame2.setVisible(true);
referenceframe1
: JFrametitle: "Window 1"width: 200height: 150visible: true
referenceframe2
: JFrametitle: "Window 2"width: 200height: 150visible: true
Set visible property
Liang,Introduction to Java Programming,revised by Dai-kaiyu46
Visibility Modifiers and Accessor/Mutator MethodsBy default, the class, variable, or method can beaccessed by any class in the same package.
publicThe 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,revised by Dai-kaiyu47
public class C1 { public int x; int y; private int z; public void m1() { } void m2() { } private void m3() { } }
public class C2 { C1 o = new C1(); can access o.x; can access o.y; cannot access o.z; can invoke o.m1(); can invoke o.m2(); cannot invoke o.m3(); }
package p1; package p2;
public class C3 { C1 o = new C1(); can access o.x; cannot access o.y; cannot access o.z; can invoke o.m1(); cannot invoke o.m2(); cannot invoke o.m3(); }
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.
even the class is public, but the member is default modifier, the class not in the same package can’t access it
Liang,Introduction to Java Programming,revised by Dai-kaiyu48
CautionPrivate not to class(except inner class)Visibility modifier not used for local
variablesPrivate can modify constructor
class C1{
…
}
public class C2{
can access C1;
}
package p1;
public class C3{
cannot access C1;
}
package p2;
Liang,Introduction to Java Programming,revised by Dai-kaiyu49
Encapsulation & Access modifiers
Encapsulation is the concept of hiding the internal details of an object
Access modifiers are used to control access to object or class
data
Liang,Introduction to Java Programming,revised by Dai-kaiyu50
Some issues
Helper class not modified by “public”, so can just be accessed by the class
in the same package. They support the reusable class The sequence of finding the class (when compile or
excute) Standard classes :rt.jar Extended classes Class path
- classpath (can refer to a .zip or a .jar file) Classpath environment variables
System will find them automatically
Liang,Introduction to Java Programming,revised by Dai-kaiyu51
Why Data Fields Should Be private?
To protect data.
To make class easy to maintain.
Getter (or accessor ) and setter (mutator) method
public returnType getPropertyName()
public boolean isPropertyName()
public void setPropertyName (dataType propertyValue)
Liang,Introduction to Java Programming,revised by Dai-kaiyu52
Example ofData Field Encapsulation
CircleCircle
RunRun
In this example, private data are used for the radius and the accessor methods getRadius and setRadius are provided for the clients to retrieve and modify the radius.
TestCircleTestCircle
Liang,Introduction to Java Programming,revised by Dai-kaiyu53
Immutable Objects and Classes If the contents of an object cannot be changed once the object is created, the object is called an immutable object and its class is called an immutable class.
A class with all private data fields and without mutators is not necessary to be immutable. For example, the following class Student has all private data fields and no mutators, but it is mutable.
For a class to be immutable, it must mark all data fields private and provide no mutator methods and no accessor methods that would return a reference to a mutable data field object.
Liang,Introduction to Java Programming,revised by Dai-kaiyu54
Examplepublic class Student { private int id; private BirthDate birthDate;
public Student(int ssn, int year, int month, int day) { id = ssn; birthDate = new BirthDate(year, month, day); }
public int getId() { return id; }
public BirthDate getBirthDate() { return birthDate; }}
public class BirthDate { private int year; private int month; private int day; public BirthDate(int newYear, int newMonth, int newDay) { year = newYear; month = newMonth; day = newDay; } public void setYear(int newYear) { year = newYear; }}
public class Test { public static void main(String[] args) { Student student = new Student(111223333, 1970, 5, 3); BirthDate date = student.getBirthDate(); date.setYear(2010); // Now the student birth year is changed! }}
Liang,Introduction to Java Programming,revised by Dai-kaiyu55
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)
TestPassObjectTestPassObject RunRun
Liang,Introduction to Java Programming,revised by Dai-kaiyu56
Passing Objects to Methods, cont.
Space required for the main method int n: 5 myCircle:
Stack Space required for the printAreas method int times: 5 Circle c:
reference A circle object
Heap
reference
Pass by value (here the value is the reference for the object)
Pass by value (here the value is 5)
Liang,Introduction to Java Programming,revised by Dai-kaiyu57
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,revised by Dai-kaiyu58
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.
To declare static variables, constants, and methods, use the static modifier.
Liang,Introduction to Java Programming,revised by Dai-kaiyu59
Static Variables, Constants, and Methods, cont.
CircleWithStaticVariableAndMethod -radius: double -numberOfObjects: int +getRadius(): double +setRadius(radius: double): void +getNumberOfObjects(): int +findArea(): double
1 radius
circle1 -radius = 1 -numberOfObjects = 2
instantiate
instantiate
Memory
2
5 radius
numberOfObjects
UML Notation: +: public variables or methods -: private variables or methods underline: static variables or methods
circle2 -radius = 5 -numberOfObjects = 2
Liang,Introduction to Java Programming,revised by Dai-kaiyu60
Example ofUsing Instance and Class Variables and Method
Objective: Demonstrate the roles of instance and class variables and their uses. This example adds a class variable numOfObjects to track the number of Circle objects created.
TestCircleWithStaticVariableAndMethodTestCircleWithStaticVariableAndMethodRunRun
CircleWithStaticVariableAndMethodCircleWithStaticVariableAndMethod
Liang,Introduction to Java Programming,revised by Dai-kaiyu61
Static modifier
To declare a class constant ,add the final keyword in the static variable declaration
Recomment access the static variable and methods using ClassName.variable(or method)
instance variables and methods can only be used from instance methods, not from static methods!
Liang,Introduction to Java Programming,revised by Dai-kaiyu62
Scope of Variables
The scope of instance and static variables is the
entire class. They can be declared anywhere
inside a class.
The scope of a local variable starts from its
declaration and continues to the end of the block
that contains the variable. A local variable must
be initialized explicitly before it can be used.
Liang,Introduction to Java Programming,revised by Dai-kaiyu63
The this Keyword
Use this to refer to the object that invokes
the instance method.
Use this to refer to an instance data field.
Use this to invoke an overloaded
constructor of the same class.
Liang,Introduction to Java Programming,revised by Dai-kaiyu64
Serving as Proxy to the Calling Object
class Foo { int i = 5; static double k = 0; void setI(int i) { this.i = i; } static void setK(double k) { Foo.k = k; } }
Suppose that f1 and f2 are two objects of Foo. Invoking f1.setI(10) is to execute f1.i = 10, where this is replaced by f1 Invoking f2.setI(45) is to execute f2.i = 45, where this is replaced by f2
Liang,Introduction to Java Programming,revised by Dai-kaiyu65
Calling Overloaded Constructor
public class Circle { private double radius; public Circle(double radius) { this.radius = radius; } public Circle() { this(1.0); } public double findArea() { return this.radius * this.radius * Math.PI; } }
Every instance variable belongs to an instance represented by this, which is normally omitted
this must be explicitly used to reference the data field radius of the object being constructed
this is used to invoke another constructor
Appear before other statements
Liang,Introduction to Java Programming,revised by Dai-kaiyu66
Array of Objects
Circle[] circleArray = new Circle[10];
An array of objects is actually an array of reference variables.
So invoking circleArray[1].findArea() 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,revised by Dai-kaiyu67
Array of Objects, cont.
reference
Circle object 0 circleArray[0]
…
circleArray circleArray[1]
circleArray[9]
Circle object 9
Circle object 1
Circle[] circleArray = new Circle[10];
Liang,Introduction to Java Programming,revised by Dai-kaiyu68
Array of Objects, cont.
Example 6.2: Summarizing the areas of the circles
TotalAreaTotalArea RunRun
Liang,Introduction to Java Programming,revised by Dai-kaiyu69
Class Abstraction and Encapsulation Class abstraction means to separate class implementation from the use of the class.
The creator of the class provides a description of the class and let the user know how the class can be used.
The user of the class does not need to know how the class is implemented. The detail of implementation is encapsulated and hidden from the user.
Class Contract (Signatures of
public methods and public constants)
Class
Class implementation is like a black box hidden from the clients
Clients use the
class through the contract of the class
Liang,Introduction to Java Programming,revised by Dai-kaiyu70
Example 6.3 The Loan Class
TestLoanClassTestLoanClass
RunRun
LoanLoan
Loan
-annualInterestRate: double
-numberOfYears: int
-loanAmount: double
-loanDate: Date
+Loan()
+Loan(annualInterestRate: double, numberOfYears: int, loanAmount: double)
+getAnnualInterestRate(): double
+getNumberOfYears(): int
+getLoanAmount(): double
+getLoanDate(): Date
+setAnnualInterestRate( annualInterestRate: double): void
+setNumberOfYears( numberOfYears: int): void
+setLoanAmount( loanAmount: double): void
+monthlyPayment(): double
+totalPayment(): double
The annual interest rate of the loan (default: 2.5).
The number of years for the loan (default: 1)
The loan amount (default: 1000)..
The date this loan was created.
Constructs a default loan object.
Constructs a loan with specified interest rate, years, and loan amount.
Returns the annual interest rate of this loan.
Returns the number of the years of this loan.
Returns the amount of this loan.
Returns the date of the creation of this loan.
Sets a new annual interest rate to this loan.
Sets a new number of years to this loan.
Sets a new amount to this loan.
Returns the monthly payment of this loan.
Returns the total payment of this loan.
Liang,Introduction to Java Programming,revised by Dai-kaiyu71
Example 6.4 The StackOfIntegers Class
RunRunTestStackOfIntegersTestStackOfIntegers
StackOfIntegers
-elements: int[] -size: int +StackOfIntegers() +StackOfIntegers(capacity: int) +empty(): boolean +peek(): int +push(element: int): int +pop(): int +getSize(): int
. . .
. . .
[0]
[1]
size - 1
capacity - 1
StackOfIntegersStackOfIntegers
Liang,Introduction to Java Programming,revised by Dai-kaiyu72
Data Abstraction and Encapsulation
Encapsulation (data hiding) Stack data structure
Last in-first out (LIFO) Developer creates stack
• Hides stack’s implementation details from clients Data abstraction
• Abstract data types (ADTs)
Liang,Introduction to Java Programming,revised by Dai-kaiyu73
Queue Abstract Data Type
Abstract Data Type (ADT) Queue
Line at grocery store First-in, first-out (FIFO)
• Enqueue to place objects in queue
• Dequeue to remove object from queue
• Enqueue and dequeue hide internal data representation
Liang,Introduction to Java Programming,revised by Dai-kaiyu74
Inner Classes
Inner class: A class is a member of another class.
Advantages: In some applications, you can use an inner class to make programs simple.
An inner class can reference the data and methods defined in the outer class in which it nests, even the ones modified by private. so you do not need to pass the reference of the outer class to the constructor of the inner class.
Frequently used with GUI handling
Using outerClass.this if the same name
Liang,Introduction to Java Programming,revised by Dai-kaiyu75
Inner Classes (cont.)
Inner classes can make programs simple and concise.
An inner class supports the work of its containing outer class and is compiled into a class named OutClassName$InnerClassName.class. For example, the inner class InnerClass in ShowInnerClass is compiled into ShowInnerClass$InnerClass.class.
Liang,Introduction to Java Programming,revised by Dai-kaiyu76
Inner Classes (cont.)
An inner class can be declared public, protected, or private subject to the same visibility rules applied to a member of the class.
An inner class can be declared static. A static inner class can be accessed using the outer class name. A static inner class cannot access nonstatic members of the outer class
Liang,Introduction to Java Programming,revised by Dai-kaiyu77
Inner Classes (cont.)
Create an object of an inner class from another class, if it is non-static.
OuterClass outerObject = new OuterClass(parameters);OuterClass.InnerClass innerObject = outerObject.new InnerClass( );
If the inner class is static, use the following syntax to create an object for it.
OuterClass.InnerClass innerObject = new OuterClass.InnerClass( );
Liang,Introduction to Java Programming,revised by Dai-kaiyu78
Inner Classes (cont.)
More about inner classes Static inner classes can’t refer to the non-static
members of outer class. Non-static inner classes can’t have static members. The inner classes even can be defined in a method The outer calss can’t refer to the member of inner
class directly
ShowInnerClass.java v2
Liang,Introduction to Java Programming,revised by Dai-kaiyu79
A taste of Simple design pattern
Singleton A class just has one instance The instance is created by itself The whole system can use it
Usage:resource manage
Liang,Introduction to Java Programming,revised by Dai-kaiyu80
A taste of Simple design pattern
EagerSingleton
LazySingleton
EagerSingleton.java
LazySingleton.java
SingletonTest.java
They can’t be inherited
top related