OO Support in Java: Classes (Part 2)

34
fian Idris, Marini Abu Bakar atan Sains Komputer versiti Kebangsaan Malaysia OO Support in Java: Classes (Part 2)

description

OO Support in Java: Classes (Part 2). INTRODUCTION. The following topics will be discussed: Constructor Methods Method Overloading. CONSTRUCTOR METHODS. Consider the following class definition: class Account { private String acctNo; private boolean active; private String owner; - PowerPoint PPT Presentation

Transcript of OO Support in Java: Classes (Part 2)

Page 1: OO Support in Java: Classes  (Part 2)

©Sufian Idris, Marini Abu BakarJabatan Sains KomputerUniversiti Kebangsaan Malaysia

OO Support in Java: Classes (Part 2)

Page 2: OO Support in Java: Classes  (Part 2)

©Sufian Idris, Marini Abu BakarJabatan Sains KomputerUniversiti Kebangsaan Malaysia

INTRODUCTION

• The following topics will be discussed:– Constructor Methods– Method Overloading

Page 3: OO Support in Java: Classes  (Part 2)

©Sufian Idris, Marini Abu BakarJabatan Sains KomputerUniversiti Kebangsaan Malaysia

CONSTRUCTOR METHODS• Consider the following class definition:

class Account {private String acctNo;private boolean active;private String owner;

public void displayInfo( ) {System.out.println("Acct number: "+acctNo);System.out.println("Owner: "+owner);System.out.print("Status: ");if (!active)

System.out.print("NOT ");System.out.println("ACTIVE");

}}

Page 4: OO Support in Java: Classes  (Part 2)

©Sufian Idris, Marini Abu BakarJabatan Sains KomputerUniversiti Kebangsaan Malaysia

• What happens when the following statements are executed?

Account acct = new Account( );acct.displayInfo( );

• When an object is created, its attributes should be initialized. Example:

Account acct = new Account( );acct.initialize("010-99333-03",

"Nada Asyiqin", true);acct.displayInfo( );

Problem: It is easy to forget to initialize newly created objects.

Page 5: OO Support in Java: Classes  (Part 2)

©Sufian Idris, Marini Abu BakarJabatan Sains KomputerUniversiti Kebangsaan Malaysia

• Can object initialization be done during object creation?

• Two common ways of initializing attributes during object creation:– Via instance variable initializers– Via constructor methods

Page 6: OO Support in Java: Classes  (Part 2)

©Sufian Idris, Marini Abu BakarJabatan Sains KomputerUniversiti Kebangsaan Malaysia

Variable initializers

Method 1: Instance Variable Initializer

class Piggybank {private int cents = 0;private String owner = null;

public void deposit(int amt) {cents += amt;

}

public void withdraw(int amt) {cents -= amt;

}}

Page 7: OO Support in Java: Classes  (Part 2)

©Sufian Idris, Marini Abu BakarJabatan Sains KomputerUniversiti Kebangsaan Malaysia

• For each Piggybank object created, its instance variable cents will be initialized to 0 and owner to null.

for (int i=0; i < 3; i++)new Piggybank( );

: Piggybank

cents 0

owner null

: Piggybank

cents 0

owner null

: Piggybank

cents 0

owner null

Page 8: OO Support in Java: Classes  (Part 2)

©Sufian Idris, Marini Abu BakarJabatan Sains KomputerUniversiti Kebangsaan Malaysia

Constructormethod

Method 2: Constructor Methodsclass Piggybank {

private int cents;private String owner;

public Piggybank( ) {cents = 0;owner = null;

}public void deposit(int amt) {

cents += amt;}public void withdraw(int amt) {

cents -= amt;}

}

Page 9: OO Support in Java: Classes  (Part 2)

©Sufian Idris, Marini Abu BakarJabatan Sains KomputerUniversiti Kebangsaan Malaysia

• The constructor method is executed each time a Piggybank object is created. When executed, – the cents attribute of the created object is initialized to

0. – the owner attribute is set to null.

Page 10: OO Support in Java: Classes  (Part 2)

©Sufian Idris, Marini Abu BakarJabatan Sains KomputerUniversiti Kebangsaan Malaysia

• Now consider the following code:

for (int i=0; i < 3; i++)new Piggybank( ); public Piggybank( ) {

cents = 0;owner = null;

}

: Piggybank

cents 0

owner null

: Piggybank

cents 0

owner null

: Piggybank

cents 0

owner null

Page 11: OO Support in Java: Classes  (Part 2)

©Sufian Idris, Marini Abu BakarJabatan Sains KomputerUniversiti Kebangsaan Malaysia

• The constructor method is a suitable place for putting in the necessary code for initializing an object when it is being created.

• Constructors are not allowed to return any value at the end of their execution.In fact, constructors do not have a return type.

public Piggybank( ) {cents = 0;owner = null;

}

Page 12: OO Support in Java: Classes  (Part 2)

©Sufian Idris, Marini Abu BakarJabatan Sains KomputerUniversiti Kebangsaan Malaysia

• Another restriction: the name of a constructor must be the same as the name of the class.

class Piggybank {…

}

public Piggybank( ) {cents = 0;owner = null;

}

Page 13: OO Support in Java: Classes  (Part 2)

©Sufian Idris, Marini Abu BakarJabatan Sains KomputerUniversiti Kebangsaan Malaysia

• Constructors can be parameterized. For an object to execute a constructor with parameters, the required parameters need to be passed when that object is created.

Page 14: OO Support in Java: Classes  (Part 2)

©Sufian Idris, Marini Abu BakarJabatan Sains KomputerUniversiti Kebangsaan Malaysia

Contoh:class Piggybank {

private int cents;private String owner;

public Piggybank(int amt, String name) {cents = amt;owner = name;

}public void deposit(int amt) {

cents += amt;}public void withdraw(int amt) {

cents -= amt;}

}

Page 15: OO Support in Java: Classes  (Part 2)

©Sufian Idris, Marini Abu BakarJabatan Sains KomputerUniversiti Kebangsaan Malaysia

• An example of creating a Piggybank object:Piggybank pb = new Piggybank(100,“Raziq”);

public Piggybank(int amt, String name) {cents = amt;owner = name;

}

: Piggybank

cents 100

owner “Raziq”

Page 16: OO Support in Java: Classes  (Part 2)

©Sufian Idris, Marini Abu BakarJabatan Sains KomputerUniversiti Kebangsaan Malaysia

• Each class must have at least one constructor method.

• If no constructors are defined for a class, the Java compiler will automatically insert a default constructor.

• The default constructor inserted will be parameterless and has an empty body.

Page 17: OO Support in Java: Classes  (Part 2)

©Sufian Idris, Marini Abu BakarJabatan Sains KomputerUniversiti Kebangsaan Malaysia

Example:

class Account {private String acctNo;private boolean active;private String owner;public Account(String nbr, String name) {

acctNo = nbr;owner = name;active = false;

}public void displayInfo( ) {

System.out.println(“Account number: "+acctNo);System.out.println(“Owner: "+owner);System.out.print("Status: ");if (!active)

System.out.print(“NOT ");System.out.println("ACTIVE");

}}

Page 18: OO Support in Java: Classes  (Part 2)

©Sufian Idris, Marini Abu BakarJabatan Sains KomputerUniversiti Kebangsaan Malaysia

class Application {public static void main(String[ ] args) {

Account acct;acct = new Account("010-99333-03",

"Nada Asyiqin");acct.displayInfo( );

}}

Page 19: OO Support in Java: Classes  (Part 2)

©Sufian Idris, Marini Abu BakarJabatan Sains KomputerUniversiti Kebangsaan Malaysia

Method Overloading• Consider the following program code:

class Form {

private int length;private char chr;private int length;private char chr;

public Form(int lgth, char c) {length = lgth;chr = c;

}

public Form(int lgth, char c) {length = lgth;chr = c;

}

private void displayBody(char c) {for (int i=0; i < length; i++)

System.out.print(c);}

private void displayBody(char c) {for (int i=0; i < length; i++)

System.out.print(c);}

Page 20: OO Support in Java: Classes  (Part 2)

©Sufian Idris, Marini Abu BakarJabatan Sains KomputerUniversiti Kebangsaan Malaysia

private void displayHead() {System.out.print(":>");

}

private void displayHead() {System.out.print(":>");

}

public void displayDefault() {displayBody(chr);displayHead();

}

public void displayDefault() {displayBody(chr);displayHead();

}

public void displayDiffChar(char c) {displayBody(c);displayHead();

}

public void displayDiffChar(char c) {displayBody(c);displayHead();

}

public void displayVarLgth(int factor, char c) {for (int i=0; i < factor; i++)

displayBody(c);displayHead();

}

public void displayVarLgth(int factor, char c) {for (int i=0; i < factor; i++)

displayBody(c);displayHead();

}}

Page 21: OO Support in Java: Classes  (Part 2)

©Sufian Idris, Marini Abu BakarJabatan Sains KomputerUniversiti Kebangsaan Malaysia

class Application {

}

public static void main(String[] args) {Form form = new Form(3, 'x');form.displayDefault();System.out.println();form.displayDiffChar('*');System.out.println();form.displayVarLgth(3, '=');

}

public static void main(String[] args) {Form form = new Form(3, 'x');form.displayDefault();System.out.println();form.displayDiffChar('*');System.out.println();form.displayVarLgth(3, '=');

}

The output:xxx:>***:>= = = = = = = = = :>

: Form

length 3

chr ‘x’

Page 22: OO Support in Java: Classes  (Part 2)

©Sufian Idris, Marini Abu BakarJabatan Sains KomputerUniversiti Kebangsaan Malaysia

• The tasks performed by the methods displayDefault(), displayDiffChar() and displayVarLgth() are basically similar i.e. to display a Form object. Is it possible to use the same name for all of those methods?

• This is allowable in Java because of its support for method overloading.Overloading a method means using the same name for more than one method in a class definition.

Page 23: OO Support in Java: Classes  (Part 2)

©Sufian Idris, Marini Abu BakarJabatan Sains KomputerUniversiti Kebangsaan Malaysia

Method Overloading• The program code after method overloading:

class Form {

private int length;private char chr;private int length;private char chr;

public Form(int lgth, char c) {length = lgth;chr = c;

}

public Form(int lgth, char c) {length = lgth;chr = c;

}

private void displayBody(int c) {for (int i=0; i < length; i++)

System.out.print(c);}

private void displayBody(int c) {for (int i=0; i < length; i++)

System.out.print(c);}

Page 24: OO Support in Java: Classes  (Part 2)

©Sufian Idris, Marini Abu BakarJabatan Sains KomputerUniversiti Kebangsaan Malaysia

private void displayHead() {System.out.print(":>");

}

private void displayHead() {System.out.print(":>");

}

public void display() {displayBody(chr);displayHead();

}

public void display() {displayBody(chr);displayHead();

}

public void display(char c) {displayBody(c);displayHead();

}

public void display(char c) {displayBody(c);displayHead();

}

public void display(int factor, char c) {for (int i=0; i < factor; i++)

displayBody(c);displayHead();

}

public void display(int factor, char c) {for (int i=0; i < factor; i++)

displayBody(c);displayHead();

}}

method overloadingapplied

Page 25: OO Support in Java: Classes  (Part 2)

©Sufian Idris, Marini Abu BakarJabatan Sains KomputerUniversiti Kebangsaan Malaysia

class Application {

}

public static void main(String[] args) {Form form = new Form(3, 'x');form.display();System.out.println();form.display('*');System.out.println();form.display(3, '=');

}

public static void main(String[] args) {Form form = new Form(3, 'x');form.display();System.out.println();form.display('*');System.out.println();form.display(3, '=');

}

public void display () {displayBody(chr);displayHead();

}

public void display () {displayBody(chr);displayHead();

}

public void display (char c) {displayBody(c);displayHead();

}

public void display (char c) {displayBody(c);displayHead();

}

public void display(int factor, char c) {for (int i=0; i < factor; i++)

displayBody(c);displayHead();

}

public void display(int factor, char c) {for (int i=0; i < factor; i++)

displayBody(c);displayHead();

}

: Form

length 3

chr ‘x’

Page 26: OO Support in Java: Classes  (Part 2)

©Sufian Idris, Marini Abu BakarJabatan Sains KomputerUniversiti Kebangsaan Malaysia

Example 2:• The println() method is actually overloaded

in the PrintStream class. int pbhInt;double pbhDbl;System.out.println("UKM");System.out.println('X');System.out.println(pbhInt);System.out.println(pbhDbl);

Page 27: OO Support in Java: Classes  (Part 2)

©Sufian Idris, Marini Abu BakarJabatan Sains KomputerUniversiti Kebangsaan Malaysia

• How is Java able to differentiate methods with the same name?

It differentiates those methods based on the type and sequence of their parameters.

Page 28: OO Support in Java: Classes  (Part 2)

©Sufian Idris, Marini Abu BakarJabatan Sains KomputerUniversiti Kebangsaan Malaysia

class Test {

}

public void doThis(double x) {System.out.println(“1stMethod");

}

public void doThis(double x) {System.out.println(“1stMethod");

}

public void doThis(float x) {System.out.println(“2ndMethod");

}

public void doThis(float x) {System.out.println(“2ndMethod");

}

public void doThis(double x, String y) {System.out.println(“3rdMethod");

}

public void doThis(double x, String y) {System.out.println(“3rdMethod");

}

public static void main(String[] args) {Test t = new Test();t.doThis(3.3);t.doThis(3.3F);t.doThis('k');t.doThis(5.2, “try");// t.doThis(“ERROR");

}

public static void main(String[] args) {Test t = new Test();t.doThis(3.3);t.doThis(3.3F);t.doThis('k');t.doThis(5.2, “try");// t.doThis(“ERROR");

}

No match

1stMethod

2ndMethod

2ndMethod

3rdMethod

Automatic casting occurs char => int => float

Page 29: OO Support in Java: Classes  (Part 2)

©Sufian Idris, Marini Abu BakarJabatan Sains KomputerUniversiti Kebangsaan Malaysia

• The output:1stMethod2ndMethod2ndMethod3rdMethod

• Note that the message in the commented statement in the main( ) method does not match with any of the doThis() methods in the Test class.

Page 30: OO Support in Java: Classes  (Part 2)

©Sufian Idris, Marini Abu BakarJabatan Sains KomputerUniversiti Kebangsaan Malaysia

• Note also thatt.doThis('k');

results in the execution of the doThis(float) method. Since there is no doThis(char) method defined in the Test class, Java automatically casts the actual parameter to find the closest match. doThis(char) => doThis(int) => doThis(float)

Page 31: OO Support in Java: Classes  (Part 2)

©Sufian Idris, Marini Abu BakarJabatan Sains KomputerUniversiti Kebangsaan Malaysia

• It is common to define classes with overloaded constructor methods. This provides their users with more than one way of creating instances.

Page 32: OO Support in Java: Classes  (Part 2)

©Sufian Idris, Marini Abu BakarJabatan Sains KomputerUniversiti Kebangsaan Malaysia

Example 1:

class Rectangle {

…}

public Rectangle() {width = 1;height = 1;

}

public Rectangle() {width = 1;height = 1;

}

public Rectangle(int size) {width = size;height = size;

}

public Rectangle(int size) {width = size;height = size;

}

public Rectangle(int w, int h) {width = w;height = h;

}

public Rectangle(int w, int h) {width = w;height = h;

}

private int width, height;private int width, height;

Constructor methods are overloaded

Page 33: OO Support in Java: Classes  (Part 2)

©Sufian Idris, Marini Abu BakarJabatan Sains KomputerUniversiti Kebangsaan Malaysia

class Application {

}

public static void main(String[] args) {Rectangle r1 = new Rectangle(5);Rectangle r2 = new Rectangle(3, 4);Rectangle r3 = new Rectangle();...

}

public static void main(String[] args) {Rectangle r1 = new Rectangle(5);Rectangle r2 = new Rectangle(3, 4);Rectangle r3 = new Rectangle();...

}

Executes first constructor

Executes second constructor

Executes third constructor

Page 34: OO Support in Java: Classes  (Part 2)

©Sufian Idris, Marini Abu BakarJabatan Sains KomputerUniversiti Kebangsaan Malaysia

Example 2:• The Date class provided in the Java class library

defines a number of constructors including the following:public Date();public Date(long milliseconds);public Date(int year, int month, int day);public Date(int year, int month, int day, int hour, int minute);public Date(int year, int month, int day, int hour, int minute,

int second);