Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Servlets, JSP, JSF 1.x & JSF 2.0, Struts Classic & Struts 2, Ajax, GWT, Spring, Hibernate/JPA, Java 5 & 6. Developed and taught by well-known author and developer. At public venues or onsite at your location.
For live Java training, please see training courses at http://courses.coreservlets.com/. Servlets, JSP, Struts Classic, Struts 2, JSF 1.x, JSF 2.0, Ajax (with jQuery, Dojo, Prototype, etc), GWT, Java 5, Java 6, Spring, Hibernate/JPA and customized combinations of topics Hibernate/JPA, topics.
Taught by the author of Core Servlets and JSP, More Servlets and JSP, and this tutorial. tutorial Available at public venues, Customized or customized Java EE Training: versions http://courses.coreservlets.com/ can be held on-site at your Servlets, JSP, JSF 1.x & JSF 2.0, Struts Classic & Struts 2, Ajax, GWT, Spring, Hibernate/JPA, Java 5 & 6. organization. Contact hall@coreservlets.com for details. Developed and taught by well-known author and developer. At public venues or onsite at your location.
Agenda
Overloading Designing real classes Inheritance Advanced topics
Abstract classes I t f Interfaces Understanding polymorphism Setting CLASSPATH and using packages Visibility modifiers Creating on-line documentation using JavaDoc
Example 4: Overloading
public class Ship4 { (In Ship4.java) public double x=0.0, y=0.0, speed=1.0, direction=0.0; public String name; public Ship4(double x, double y, double speed, double direction, String name) { this.x = x; this.y = y; this.speed = speed; this.direction = direction; this.name = name; } public Ship4(String name) { this.name = name; } private double degreesToRadians(double degrees) { return(degrees * Math.PI / 180.0); } ...
Overloading (Continued)
... public void move() { move(1); } public void move(int steps) { g = degreesToRadians(direction); g ( ) double angle x = x + steps * speed * Math.cos(angle); y = y + steps * speed * Math.sin(angle); } public void printLocation() { System.out.println(name + " is at (" + x + "," + y + ")."); }
6
Output:
Ship1 is at (1.0,0.0). Ship2 is at (-4.24264...,4.24264...).
7
Simple examples:
Here are two square methods that differ only in the type of the argument; they would both be permitted inside the same class definition.
// square(4) is 16 public int square(int x) { return(x*x); } // sq square("four") are("fo r") is "fo "four r fo four" r" public String square(String s) { return(s + " " + s); }
Output:
10
11
Example 6: Inheritance
public class Speedboat extends Ship { private String color = "red"; public Speedboat(String name) { super(name); setSpeed(20); } public Speedboat(double x, double y, double speed, double direction, String name, String color) { super(x, y, speed, direction, name); setColor(color); } public void printLocation() { System.out.print(getColor().toUpperCase() + " "); super.printLocation(); p p () } ...
13
14
Output O t t
RED Speedboat1 is at (20,0). p is at ( (-1.41421,1.41421). , ) BLUE Speedboat2 Ship1 is at (-1.41421,1.41421).
15
16
Inheritance
Syntax for defining subclasses
public class NewClass extends OldClass { ... }
Nomenclature:
The old class is called the superclass, base class or parent class The new class is called the subclass, derived class or child class
Effect of inheritance
Subclasses automatically have all public fields and methods of the parent class You dont need any special syntax to access the inherited fields and methods; you use the exact same syntax as with locally defined fields or methods. You can also add in fields or methods not available in the superclass
Constructor life-cycle
Each constructor has three phases:
1. Invoke the constructor of the superclass
The zero-argument constructor is called automatically. No special syntax is needed unless you want a different parent constructor.
18
2. Initialize all instance variables based on their initialization statements 3. Execute the body of the constructor
If there is a locally y defined method and an i h it d method inherited th d that th t have h the th same name and take the same arguments, you can use the following to refer to the inherited method
super.methodName(...)
20
Abstract Classes
Idea
Ab Abstract classes l cannot be b instantiated i i d (you ( cannot call ll "new"). " ") Abstract classes permit declaration of classes that define only part of an implementation, leaving the subclasses to provide the details
A class is considered abstract if at least one method in the class has no implementation
An abst abstract act method et od has as no o implementation p e e tat o (known ( ow in C++ C as a pure pu e virtual function) Any class with an abstract method must be declared abstract If the subclass overrides all the abstract methods from the superclass, than an object of the subclass can be instantiated
An abstract class can contain instance variables and methods that are fully implemented
Any subclass can override an inherited concrete method
21
Interfaces
Idea
Interfaces define a Java type consisting purely of constants and abstract methods An interface does not implement any of the methods, methods but imposes a design structure on any class that uses the interface A class l that h implements i l an interface i f must either i h provide id definitions for all methods or declare itself abstract
23
Interfaces (Continued)
Modifiers
All methods in an interface are implicitly abstract and the keyword abstract is not required in a method declaration Data fields in an interface are implicitly static final (constants) All data fields and methods in an interface are implicitly public
public interface Interface1 { DataType CONSTANT1 = value1; DataType CONSTANT2 = value2; ReturnType1 method1(ArgType1 arg); ReturnType2 2 method2(ArgType2 2 2 arg); }
24
Interfaces (Continued)
Extending Interfaces
I Interfaces f can extend d other h interfaces, i f which hi h brings bi rise i to subb interfaces and super-interfaces Unlike classes, however, an interface can extend more than one i t f interface at t a time ti
public interface Displayable extends Drawable, Printable { // Additonal constants and abstract methods ... }
25
Polymorphism
Polymorphic literally means of multiple shapes and in the context conte t of object-oriented object oriented programming programming, polymorphic means having multiple behavior A polymorphic method results in different actions depending on the object being referenced
Also known as late binding or run-time binding
In practice, polymorphism is used in conjunction with ith reference f arrays to t loop l through th h a collection ll ti of objects and to access each object's polymorphic y method
26
Polymorphism: Example
public class PolymorphismTest { public static void main(String[] args) { Ship[] ships = new Ship[3]; ships[0] = new Ship(0.0, 0.0, 2.0, 135.0, "Ship1"); ships[1] = new Speedboat("Speedboat1"); ships[2] = new Speedboat(0.0, 0.0, 2.0, 135.0, "Speedboat2" Speedboat2 , "blue"); blue ); for(int i=0; i<ships.length ; i++) { ships[i].move(); ships[i].printLocation(); } } }
27
Polymorphism: Result
Compiling and Running:
javac PolymorphismTest.java java PolymorphismTest
Output
RED Speedboat1 is at (20,0). BLUE Speedboat2 is at (-1.41421,1.41421). Ship1 is at (-1.41421,1.41421).
28
CLASSPATH
The CLASSPATH environment variable d fi defines a list li of f directories di i in i which hi h to look l k for classes
Default = current directory and system libraries Best practice is to not set this when first learning Java!
Supplying a CLASSPATH
javac classpath .;D:\cwp WebClient.java java classpath .;D:\cwp WebClient
29
Creating Packages
A package lets you group classes in subdirectories to avoid accidental name conflicts
To create a package:
1. Create a subdirectory with the same name as the desired package and place the source files in that directory 2 Add a package 2. k statement t t t to t each h file fil
package packagename;
3. Files in the main directory that want to use the package should include
import packagename.*;
30
The package statement must be the first statement in the file If a package statement is omitted from a file file, then the code is part of the default package
Package Directories
The package hierarchy reflects the file system directory di structure
Package java.math
31
The root of any package must be accessible through a Java system default directory or through the CLASSPATH environment variable
Visibility Modifiers
public
This modifier indicates that the variable or method can be accessed anywhere an instance of the class is accessible A class may also be designated public, which means that any other class can use the class definition The name of a public class must match the filename, thus a file fil can have h only l one public bli class l
private
A private variable or method is only accessible from methods within the same class g a class variable private p "hides" the data within Declaring the class, making the data available outside the class only through method calls
32
[default]
A variable i bl or method h dh has d default f l visibility i ibili if a modifier difi is i omitted Default visibility indicates that the variable or method can b accessed be d by b methods th d within ithi the th class, l and d within ithi classes in the same package Default variables are inherited only by subclasses in the same package k
33
Cake, ChocolateCake, and Pie inherit a calories field However, if the code in the Cake class had a reference to object of type Pie, the protected calories field of the Pie object could not be accessed in the Cake class
Protected fields of a class are not accessible outside its branch of the class hierarchy (unless the complete tree hierarchy is in the same package)
34
Even through inheritance, the fat data field cannot cross the package boundary
Thus, the fat data field is accessible through any Dessert, Pie, and Cake object within any code in the Dessert package However, the ChocolateCake class does not have a fat data field, nor can the fat data field of a Dessert, Cake, or Pie object be accessed from code in the ChocolateCake class
35
Visibility Summary
Modifiers
Data Fields and Methods Accessible from same class? Accessible to classes (nonsubclass) from the same package? Accessible to subclass from the same package? Accessible to classes (nonsubclass) from different package? Accessible to subclasses from different package? Inherited by subclass in the same package? Inherited by subclass in different package?
36
private yes no
yes
yes
yes
no
yes
no
no
no
yes
no
no
no
yes
yes
yes
no
yes
yes
no
no
Other Modifiers
final
F For a class, l indicates i di t that th t it cannot t be b subclassed b l d For a method or variable, cannot be changed at runtime or overridden in subclasses
synchronized h i d
Sets a lock on a section of code or method Only y one thread can access the same synchronized y code at any given time
transient
Variables are not stored in serialized objects sent over the network or stored to disk
native
Indicates I di t that th t the th method th d is i implement i l t using i C or C++
37
JavaDoc
Used to generate on-line documentation
javadoc Foo.java Bar.java (or *.java)
@version
Version number of the document Must use javadoc version ... to g generate in output p
@param
Documents a method argument
@return
Documents the return type of a method
39
-version
Includes version number ( (omitted by y default) )
-noindex
Tells javadoc not to generate a complete index
-notree notree
Tells javadoc not to generate the tree.html class hierarchy
-link, , -linkoffline
Tells javadoc where to look to resolve links to other packages
-link http://java.sun.com/j2se/1.5.0/docs/api/ -linkoffline http://java.sun.com/j2se/1.5.0/docs/api/ c:\jdk1.5\docs\api
40
JavaDoc: Example
/** Ship example to demonstrate OOP in Java. * * @author <A HREF="mailto:hall@coreservlets.com"> * Marty Hall</A> */ public class Ship { private double x=0.0, y=0.0, speed=1.0, direction=0.0; private String name; /** Build a ship with specified parameters. */ public Ship(double x, double y, double speed, double direction, String g name) { setX(x); setY(y); setSpeed(speed); setDirection(direction); ( ) setName(name); } ...
41
JavaDoc: Example
> javadoc -link http://java.sun.com/j2se/1.5.0/docs/api/ -author author *.java .java
42
Summary
Overloading
Two methods or constructors with same name but different argument signatures
Inheritance
Use extends to create a new class that inherits from a superclass All non-private methods and instance variables are available in the child class with no special syntax required
Overriding
A method in a child class with the same name and argument signature as a method from the parent class The original method in the parent class is accessible through super.methodName(...)
43
Summary (Continued)
With polymorphism, binding of a method to an object bj is i determined d i d at run-time i The CLASSPATH defines in which directories to look for classes Packages help avoid namespace collisions
The package statement must be first statement in the source file before any other statements
The four visibility y types yp are: p public, , private, p , protected, and default (no modifier)
Use private for all instance variables Use public for constructors and for methods that you expect users of your class to call Use other modifiers sparingly, if at all
44
Questions?
Servlets, JSP, JSF 1.x & JSF 2.0, Struts Classic & Struts 2, Ajax, GWT, Spring, Hibernate/JPA, Java 5 & 6. Developed and taught by well-known author and developer. At public venues or onsite at your location.