ch 9 classes and objects 9... · 2020. 8. 10. · objects of the class. used for constants across...
TRANSCRIPT
![Page 1: Ch 9 Classes and Objects 9... · 2020. 8. 10. · objects of the class. Used for constants across classes. Used to collect statistics or totals of all classes. • A non-static field](https://reader035.vdocuments.us/reader035/viewer/2022071102/5fdbba2931eda9491471cd46/html5/thumbnails/1.jpg)
Introduction to Classes and Objects
David GreensteinMonta Vista High School
![Page 2: Ch 9 Classes and Objects 9... · 2020. 8. 10. · objects of the class. Used for constants across classes. Used to collect statistics or totals of all classes. • A non-static field](https://reader035.vdocuments.us/reader035/viewer/2022071102/5fdbba2931eda9491471cd46/html5/thumbnails/2.jpg)
Client Class• A client class is one that constructs and uses objects of
another class.
public class A { private int field1;
public A() {} … public void aMethod1() {} … private void aMethod2() {} …
}
public class B {
… public void bMethod1() {
A s = new A(); … s.aMethod1();
} …
}
B is a “client” of A
B only has access to A’s public constructors and methods
![Page 3: Ch 9 Classes and Objects 9... · 2020. 8. 10. · objects of the class. Used for constants across classes. Used to collect statistics or totals of all classes. • A non-static field](https://reader035.vdocuments.us/reader035/viewer/2022071102/5fdbba2931eda9491471cd46/html5/thumbnails/3.jpg)
Public vs. Private• Public constructors and methods of a class are its
interface with classes that use it (e.g. its clients).
• All fields are usually declared private and hidden from clients.
• Constants in a class are designated private final.
• In some rare cases, a constant is universal and it is made public static final. (e.g. Math.PI, Math.E)
• “Helper” methods that are needed only inside the class are declared private.
![Page 4: Ch 9 Classes and Objects 9... · 2020. 8. 10. · objects of the class. Used for constants across classes. Used to collect statistics or totals of all classes. • A non-static field](https://reader035.vdocuments.us/reader035/viewer/2022071102/5fdbba2931eda9491471cd46/html5/thumbnails/4.jpg)
Public vs. Private (cont)• Private constructors are used when the only client is
the class itself.
• A private field is accessible anywhere within the class’s source code.
• Any object can access and modify a private field of another object of the same class.
public class Fraction { private int num, denom; ... public multiply (Fraction other) { int newNum = num * other.num; ...
![Page 5: Ch 9 Classes and Objects 9... · 2020. 8. 10. · objects of the class. Used for constants across classes. Used to collect statistics or totals of all classes. • A non-static field](https://reader035.vdocuments.us/reader035/viewer/2022071102/5fdbba2931eda9491471cd46/html5/thumbnails/5.jpg)
Controlling Access in Java• public modifier
Package 2
Delta
World
BetaSub
Epsilon
Package 1
Alpha
Beta
Gamma
Field/Methodpublic
field & method can be “seen”by everyone
![Page 6: Ch 9 Classes and Objects 9... · 2020. 8. 10. · objects of the class. Used for constants across classes. Used to collect statistics or totals of all classes. • A non-static field](https://reader035.vdocuments.us/reader035/viewer/2022071102/5fdbba2931eda9491471cd46/html5/thumbnails/6.jpg)
Controlling Access in Java• private modifier
Package 2
Delta
World
BetaSub
Epsilon
Package 1
Alpha
Beta
Gamma
Field/Methodprivate
field & method can be “seen”
only insidethe class
![Page 7: Ch 9 Classes and Objects 9... · 2020. 8. 10. · objects of the class. Used for constants across classes. Used to collect statistics or totals of all classes. • A non-static field](https://reader035.vdocuments.us/reader035/viewer/2022071102/5fdbba2931eda9491471cd46/html5/thumbnails/7.jpg)
Controlling Access in Java• protected modifier
Package 2
Delta
World
BetaSub
Epsilon
Package 1
Alpha
Beta
Gamma
Field/Methodprotected
field & method can be “seen”inside packageand subclass
![Page 8: Ch 9 Classes and Objects 9... · 2020. 8. 10. · objects of the class. Used for constants across classes. Used to collect statistics or totals of all classes. • A non-static field](https://reader035.vdocuments.us/reader035/viewer/2022071102/5fdbba2931eda9491471cd46/html5/thumbnails/8.jpg)
Controlling Access in Java• no modifier
Package 2
Delta
World
BetaSub
Epsilon
Package 1
Alpha
Beta
Gamma
Field/Method<no modifier> field & method can be “seen”
onlyinside package
![Page 9: Ch 9 Classes and Objects 9... · 2020. 8. 10. · objects of the class. Used for constants across classes. Used to collect statistics or totals of all classes. • A non-static field](https://reader035.vdocuments.us/reader035/viewer/2022071102/5fdbba2931eda9491471cd46/html5/thumbnails/9.jpg)
Controlling Access in Java• Field/Method Access Summary
Modifier Class Package Subclass World
public Y Y Y Y
protected Y Y Y N
no modifier Y Y N N
private Y N N N
• The AP Exam (and this class) only use public and private modifiers.
![Page 10: Ch 9 Classes and Objects 9... · 2020. 8. 10. · objects of the class. Used for constants across classes. Used to collect statistics or totals of all classes. • A non-static field](https://reader035.vdocuments.us/reader035/viewer/2022071102/5fdbba2931eda9491471cd46/html5/thumbnails/10.jpg)
Accessors and Modifiers• A programmer often provides methods, called
accessors, that return values of private fields; methods that set values of private fields are called modifiers or mutators.
public class Fraction { private int num, denom; ...
public int getNum() { return num; } public void setNum(int n) { num = n; }
... }
• Accessors’ names often start with get.
• Modifiers’ names often start with set.
![Page 11: Ch 9 Classes and Objects 9... · 2020. 8. 10. · objects of the class. Used for constants across classes. Used to collect statistics or totals of all classes. • A non-static field](https://reader035.vdocuments.us/reader035/viewer/2022071102/5fdbba2931eda9491471cd46/html5/thumbnails/11.jpg)
Encapsulation• Hiding the implementation details of a class is called
encapsulation. (e.g. making all fields and helper methods private)
• Encapsulation helps in program maintenance. A change in one class does not affect other classes.
• A client of a class interacts with the class only through well-documented public constructors and methods; this facilitates team development.
public class A { private int field1;
public A() {} … public void aMethod1() {} … private void aMethod2() {} …
}
Public interface
Encapsulated (Hidden)
![Page 12: Ch 9 Classes and Objects 9... · 2020. 8. 10. · objects of the class. Used for constants across classes. Used to collect statistics or totals of all classes. • A non-static field](https://reader035.vdocuments.us/reader035/viewer/2022071102/5fdbba2931eda9491471cd46/html5/thumbnails/12.jpg)
Constructors• A constructor is a procedure for creating objects of the
class. It is different than a method.
• Most constructors are public.
• A constructor often initializes an object’s fields.
• Constructors do not have a return type (not even void) and they do not return a value.
• All constructors in a class have the name of the class.
• Constructors may take parameters.
public class A {
public A() { ... } public A(int a, String b) { ... } …
}
![Page 13: Ch 9 Classes and Objects 9... · 2020. 8. 10. · objects of the class. Used for constants across classes. Used to collect statistics or totals of all classes. • A non-static field](https://reader035.vdocuments.us/reader035/viewer/2022071102/5fdbba2931eda9491471cd46/html5/thumbnails/13.jpg)
Constructors (cont)• If a class has more than one constructor, they must
have a different signature.
• Programmers often provide a “no-args” constructor that takes no parameters.
• If a programmer does not define any constructors, Java provides one default no-args constructor, which allocates memory and sets fields to the default values: numbers to zero, objects to null, boolean to false, and char to null (0) character.
public class A {
public A() { ... } public A(int a, String b) { ... } …
}
![Page 14: Ch 9 Classes and Objects 9... · 2020. 8. 10. · objects of the class. Used for constants across classes. Used to collect statistics or totals of all classes. • A non-static field](https://reader035.vdocuments.us/reader035/viewer/2022071102/5fdbba2931eda9491471cd46/html5/thumbnails/14.jpg)
Constructors (cont)public class Fraction { private int num, denom;
public Fraction ( ) { num = 0; denom = 1; }
public Fraction (int n) { num = n; denom = 1; } // Continued ->>
public Fraction (int n, int d) { num = n; denom = d; reduce (); }
public Fraction (Fraction other) { num = other.num; denom = other.denom; } ...
}
copy constructorno-args
constructor
![Page 15: Ch 9 Classes and Objects 9... · 2020. 8. 10. · objects of the class. Used for constants across classes. Used to collect statistics or totals of all classes. • A non-static field](https://reader035.vdocuments.us/reader035/viewer/2022071102/5fdbba2931eda9491471cd46/html5/thumbnails/15.jpg)
Constructors (cont)public class MyWindow extends JFrame { ... // Constructor: public void MyWindow ( ) { ... } ...
Compiles fine, but thecompiler thinks this isa method and uses
MyWindow’sdefault no-args constructor
instead!!
• A nasty bug!!!
![Page 16: Ch 9 Classes and Objects 9... · 2020. 8. 10. · objects of the class. Used for constants across classes. Used to collect statistics or totals of all classes. • A non-static field](https://reader035.vdocuments.us/reader035/viewer/2022071102/5fdbba2931eda9491471cd46/html5/thumbnails/16.jpg)
Constructors (cont)
public class Fraction { ... public Fraction (int n) { this (n, 1); } ... public Fraction (int p, int q) {
num = p; denom = q; reduce (); } ...
• Constructors of a class can call each other using the keyword this.
• Using this is a good way to avoid duplicating code, and it makes it easier to maintain. You only need to change one constructor so both are changed.
![Page 17: Ch 9 Classes and Objects 9... · 2020. 8. 10. · objects of the class. Used for constants across classes. Used to collect statistics or totals of all classes. • A non-static field](https://reader035.vdocuments.us/reader035/viewer/2022071102/5fdbba2931eda9491471cd46/html5/thumbnails/17.jpg)
new Operator
public class Fraction { ... public Fraction (int n) { this(n, 1); } ... public Fraction (int n, int d) { num = n; denom = d; } ...
• Constructors are invoked when using the new operator.
• Parameters passed by the new operator must match the number, types, and order of parameters expected by one of the constructors.
Fraction f1 = new Fraction(2); ... Fraction f2 = new Fraction(3,6);
![Page 18: Ch 9 Classes and Objects 9... · 2020. 8. 10. · objects of the class. Used for constants across classes. Used to collect statistics or totals of all classes. • A non-static field](https://reader035.vdocuments.us/reader035/viewer/2022071102/5fdbba2931eda9491471cd46/html5/thumbnails/18.jpg)
References to ObjectsFraction f1 = new Fraction (3,7); Fraction f2 = f1;
Fraction f1 = new Fraction(3,7); Fraction f2 = new Fraction(3,7);
Refer to thesame object
f1
f2
Fraction object
num = 3 denim = 7
f1
f2
Fraction object
num = 3 denim = 7
Fraction object
num = 3 denim = 7
![Page 19: Ch 9 Classes and Objects 9... · 2020. 8. 10. · objects of the class. Used for constants across classes. Used to collect statistics or totals of all classes. • A non-static field](https://reader035.vdocuments.us/reader035/viewer/2022071102/5fdbba2931eda9491471cd46/html5/thumbnails/19.jpg)
Methods
• A method is always defined inside a class.
• Methods used by client classes are public.
• “Helper” methods only used inside the class are private.
• Style:Method names start with a lowercase letter.Method names are “verb-like”.
[public|private] [returnType|void] methodName(parameterList) { stmt1; stmt2; ... }
signaturebodyheader
![Page 20: Ch 9 Classes and Objects 9... · 2020. 8. 10. · objects of the class. Used for constants across classes. Used to collect statistics or totals of all classes. • A non-static field](https://reader035.vdocuments.us/reader035/viewer/2022071102/5fdbba2931eda9491471cd46/html5/thumbnails/20.jpg)
public void methodA(double x, double y){ … }
public int methodB(int m, double n, String s) { … }
Passing Parameters• A parameter is something passed with a method call.
• Any expression that has an appropriate data type can serve as a parameter.
• Methods can return one primitive or object.
• A “smaller” type can be promoted to a “larger” type.
methodA(3.2, Math.PI); int a = methodB(2, 3, “hello”);
promoted typereturn type
Calling a method
Method headers
![Page 21: Ch 9 Classes and Objects 9... · 2020. 8. 10. · objects of the class. Used for constants across classes. Used to collect statistics or totals of all classes. • A non-static field](https://reader035.vdocuments.us/reader035/viewer/2022071102/5fdbba2931eda9491471cd46/html5/thumbnails/21.jpg)
Pass by Value• Primitive data type parameters are always “pass by
value”. A copy of the value is made of the parameter.
• In this example, num changes in the fibonacci() method but the original variable a does not change.
int a = 10; int b = fibonacci(a);
Client method
public int fibonacci(int num) { int start = num; … return start; }
Method
a = 10
num = 10
Scope: Calling method
Scope: local to
fibonacci
Copy
![Page 22: Ch 9 Classes and Objects 9... · 2020. 8. 10. · objects of the class. Used for constants across classes. Used to collect statistics or totals of all classes. • A non-static field](https://reader035.vdocuments.us/reader035/viewer/2022071102/5fdbba2931eda9491471cd46/html5/thumbnails/22.jpg)
Pass by “Reference” (Value)• Objects are always passed as references: the reference
(object address) is copied, not the object.
• In this example, any changes to the fig object is reflected in the original f object.
Fidget f = new Fidget(); AnotherClass ac = new AnotherClass(); ac.callMe(f);
Client method
public class AnotherClass { … public void callMe(Fidget fig) { … } }
Fidget object
Scope: Calling method
Scope: local to callMe
Copy
f
fig
![Page 23: Ch 9 Classes and Objects 9... · 2020. 8. 10. · objects of the class. Used for constants across classes. Used to collect statistics or totals of all classes. • A non-static field](https://reader035.vdocuments.us/reader035/viewer/2022071102/5fdbba2931eda9491471cd46/html5/thumbnails/23.jpg)
“this” Object• Inside a method, this refers to the object for which the
method was called. this can be passed to other constructors and methods as a parameter:
public class Yahtzee { … Player p1 = new Player(this); … }
Refers to this Yahtzee
object
![Page 24: Ch 9 Classes and Objects 9... · 2020. 8. 10. · objects of the class. Used for constants across classes. Used to collect statistics or totals of all classes. • A non-static field](https://reader035.vdocuments.us/reader035/viewer/2022071102/5fdbba2931eda9491471cd46/html5/thumbnails/24.jpg)
return Statement• A method, unless void, returns a value of the specified
type to the calling method.
• The return statement is used to immediately quit the method and, if not void, return a value or null.
public Dice getDice() { … return myDice; … }
The type of the return value or expression must match the
method’s declared return type.
![Page 25: Ch 9 Classes and Objects 9... · 2020. 8. 10. · objects of the class. Used for constants across classes. Used to collect statistics or totals of all classes. • A non-static field](https://reader035.vdocuments.us/reader035/viewer/2022071102/5fdbba2931eda9491471cd46/html5/thumbnails/25.jpg)
Overloaded Methods• Methods of the same class that have the same name
but different numbers or types of parameters are called overloaded methods.
• Use overloaded methods when they perform similar tasks.
public static int abs(int num) { … } public static double abs(double num) { … }
Math class - different parameter types
public static String substring(int num) { … } public static String substring(int start, int stop) { … }
String class - different number of parameters
![Page 26: Ch 9 Classes and Objects 9... · 2020. 8. 10. · objects of the class. Used for constants across classes. Used to collect statistics or totals of all classes. • A non-static field](https://reader035.vdocuments.us/reader035/viewer/2022071102/5fdbba2931eda9491471cd46/html5/thumbnails/26.jpg)
Overloaded Methods (cont)• The compiler treats overloaded methods as completely
different methods.
• The compiler knows which one to call based on the number and the types of the parameters passed to the method.
Circle circle = new Circle(5); circle.move(50, 100); Point center = new Point(50, 100); circle.move(center);
public class Circle { public void move(int x, int y) { ... }
public void move(Point p) { ... } ...
![Page 27: Ch 9 Classes and Objects 9... · 2020. 8. 10. · objects of the class. Used for constants across classes. Used to collect statistics or totals of all classes. • A non-static field](https://reader035.vdocuments.us/reader035/viewer/2022071102/5fdbba2931eda9491471cd46/html5/thumbnails/27.jpg)
Overloaded Methods (cont)• The return type alone is not sufficient for making a
distinction between overloaded methods.
public class Circle { public void move(int x, int y) { ... }
public Point move(int x, int y) { ... } ...
Syntax Error
![Page 28: Ch 9 Classes and Objects 9... · 2020. 8. 10. · objects of the class. Used for constants across classes. Used to collect statistics or totals of all classes. • A non-static field](https://reader035.vdocuments.us/reader035/viewer/2022071102/5fdbba2931eda9491471cd46/html5/thumbnails/28.jpg)
Static Fields• A static field (a.k.a. class field or class variable) is shared by all
objects of the class.Used for constants across classes.Used to collect statistics or totals of all classes.
• A non-static field (a.k.a. instance field or instance variable) belongs to an individual object.
• Public static fields, usually global constants, are referred to in other classes using “dot notation”: ClassName.constName
public class Die { public static int DEFAULT_SIDES = 6; ...
for (int a = 0; a < Die.DEFAULT_SIDES; a++) ...
![Page 29: Ch 9 Classes and Objects 9... · 2020. 8. 10. · objects of the class. Used for constants across classes. Used to collect statistics or totals of all classes. • A non-static field](https://reader035.vdocuments.us/reader035/viewer/2022071102/5fdbba2931eda9491471cd46/html5/thumbnails/29.jpg)
Static Fields (cont)• Usually static fields are NOT initialized in constructors.
They are initialized either in declarations or in public static methods.
• If a class has only static fields, there is no point in creating objects of that class (all of them would be identical).
• Math and System classes are examples of the above. They have no public constructors and cannot be instantiated.
public class Die { public static int DEFAULT_SIDES = 6; ...
![Page 30: Ch 9 Classes and Objects 9... · 2020. 8. 10. · objects of the class. Used for constants across classes. Used to collect statistics or totals of all classes. • A non-static field](https://reader035.vdocuments.us/reader035/viewer/2022071102/5fdbba2931eda9491471cd46/html5/thumbnails/30.jpg)
Static Methods• Static methods can access and manipulate a class’s
static fields.
• Static methods are called using “dot notation”: ClassName.statMethod(...)
double x = Math.random(); double y = Math.sqrt(x);
System.exit();
![Page 31: Ch 9 Classes and Objects 9... · 2020. 8. 10. · objects of the class. Used for constants across classes. Used to collect statistics or totals of all classes. • A non-static field](https://reader035.vdocuments.us/reader035/viewer/2022071102/5fdbba2931eda9491471cd46/html5/thumbnails/31.jpg)
Static Methods (cont)• Static methods cannot access non-static fields or call
non-static methods of the class.public class MyClass { public static final int staticConst; private static int staticVar; private int instanceVar; ... public static void main(String[] args) { staticVar = staticConst; staticMethod2(...);
instanceVar = ...; instanceMethod(...); } public void instanceMethod() { … } }
Okay
ERROR!
Access applies to main
and all static methods
![Page 32: Ch 9 Classes and Objects 9... · 2020. 8. 10. · objects of the class. Used for constants across classes. Used to collect statistics or totals of all classes. • A non-static field](https://reader035.vdocuments.us/reader035/viewer/2022071102/5fdbba2931eda9491471cd46/html5/thumbnails/32.jpg)
Non-Static Methods• A non-static method is called for a particular object
using “dot notation” bound to an instance.Die d1 = new Die(); d1.roll(); int a = d1.getValue();
public class Die { private int value; private static final int DEFAULT_SIDES = 6; public void roll() { … } … public static void staticMethod(int num) { … } … public int rollAndGetValue() { roll(); staticMethod(DEFAULT_SIDES); return value; } }
• Non-static methods can access all fields and callall methods of their class, both static and non-static!
All Okay!!
![Page 33: Ch 9 Classes and Objects 9... · 2020. 8. 10. · objects of the class. Used for constants across classes. Used to collect statistics or totals of all classes. • A non-static field](https://reader035.vdocuments.us/reader035/viewer/2022071102/5fdbba2931eda9491471cd46/html5/thumbnails/33.jpg)
Questions?