Java Module-4 Part-A (Packages) Book Notes
Java Module-4 Part-A (Packages) Book Notes
PART A i Porcke s
CHAPTER
9
Packages and Interfaces
his chapterexamines two of Java's most innovative features: packages and interfaces.
it
other class named List stored elsewhere.Packages are stored in a hierarchical manner and
arejexplicitly imported into new class definitions.
In previous chapters, you have seen how methods define the interface to the data in
a Through the use of the interface keyword, Java allows you to fully abstract the
class.
interface from its implementation. Using interface, you can specify a set of methods that
can be implemented by one or more classes. The interface, itself, does not actually define
any implementation. Although they are similar to abstract classes, interfaces have an
additional capability: A class can implement more than one interface. By contrast, a class
can only inherit a single superclass (abstract or otherwise).
Packages
In the preceding chapters,the mame of each example clss)was taken from the same
name space. means that alunique name)had to be used for each class to avoid name
This
collisions, After a while, without someway to managethe name space, you could run out
of convenient, descriptive names for individuàl classes. You also need some way to be
assured that the name you choose for a class will be reasonably unique and not collide
with class names chosen by other programmers. (Imagine a small group of programmers
fighting over who gets to use the name "Foobar" as a class name. Or, imagine the entire
Internet community arguing over who first named a class "Espresso.") Thankfully,Java
provides almechanism for partitioning thelass name space) into more manageable
chunks. This mechanism is the/package The package is bothanamingland avisibility
Control mechanism.You can define classes inside a package that are not accessible by
code outstde that package, You can also define class members that are only exposed
to members of the same package. This allows Four classes to haveintimate
other
knowledge of each other, but not expose tht knowledge to the rest of the world.
Packeases
jovaio net
Jevq ast
tasses
daashcko nlw
184 Part I: The Java Language
Defining a Package
command as the first statement
Tocreate a package is quite easy: simply include apackage
within that file will belong to the specified package.
in a Java source file, Any classes declared
The package statement defines. a name space in which classes are stored. If you omit the
package statement, the class names ar put into the default package, which has no name.
(Thisiswhy you havent had to worry about packages before now.) While the default package
is fine for short, sample programs, it is inadequate for real applications. Most of the time,
you will define a packageforyour,code.
This is the general form of the package statement:
package pkg:
Here,pkgjis the name of thepackage. For example, the followingstatement creates a package
called MyPackage.
package MyPackage;
Java usesfile system directories tostore packages.For example, the .class files for
any
you declare to be part of MyPackage must be stored in a directory called MyPackage.
classes
Rememberthat case is significant, and the directory name must match the package name
exactly.
More than one file can include the same package statement. The
package statement
simply specifies to which packagethe classes defined in a file belong. does not exclude
It
other classes in other files from being
part of that samepackage. Most real-world packages
are spread across many files.
You can create ahierarchy packagesTo do so, simply separate each package name
of
fromthe one above by use of a period. The general form of a multileveled
package statement
it
is shownhere:
package pkgl[pkg2[,pkg3]]:
A package hierarchy must be reflected inthe file system of your Java development
system.For example, a package declared as
package java.awt.image;
CLASSPATH environmental variable Third,you can use the -classpath option with java
and javacto specify the path to your classes.
package MyPack
PARTI
In order fora program to find MyPack,one of three things must be true. Either the program
can be executed from a directory immediately above MyPack, orthe CLASSPATH mustbe
to include the path to MyPack,or the -classpath
set option must specify the path to MyPack
when the program is run via java.
When thesecond two options are used, the class path must not include MyPack,itself.
It must simplyspecifythe path to MyPack.For example, in a Windowsenvironment, if the
path to MyPack is
C:\MyPrograms\Java\MyPack
The easiest way to try the examples shown in this book is to simply create the package
directories below your Current development directory, put the .class files into the
directories, and then execute the programs from the development directory.
appropriate
This is the approach used in the following example.
class Balance
String name;
double bal;
void show () {
public if (bal<0)
System. out.print ("- -> );
System.,out .println (name + ": $" + bal) ;
123.23) ;
Balance ("K. J. Fielding",
current [0) = new 157.02) ;
("Will Tell",
current [1) = new Balance -12.33);
("Tom Jackson",
current [2] = new Balance
[i) .show();
for (int i=0; i<3; i++) current
a directorycalled MyPack.
Call this fileAccountBalance.java and put it in
the .class file is also in the MyPack
Next, compile the file. Make sure that
resulting
java AccountBalance
Access Protection
various aspects of Java's access control mechanism
In the preceding chapters,you learned about
already know that access to a private member of
and its access specifiers. For example, you
that class. Packages add another dimension
to
a class is granted only to other members
of
over the visibility of variables and methods within classes, subclasses,and packages.
control
and containing the name space
Classes and packages are both means of encapsulating
act as containers for classes and other
and scope of variables and methods. Packages
for dataand code. The class is Java's
subordinate packages. Classes act as containers
Because of the interplaybetween classes and packages,
Java
smallest unit of abstraction.
for class members:
addresses four categories of visibility
The three access specifiers, private,public, and protected, provide a variety of ways
toproduce the many levels of access required by these categories.Table 9-1 sums up the
interactions.
follows. Anything declared public can be accessed from anywhere. Anything declared
does not have an explicit access
prívate cannot be seen outside of its class. When a member
187
Chapter 9: Packages and Interfaces
subclass
Yes Yes
Same No Yes
package
non-subclass
No No Yes Yes
Different
package
subclass
No No No Yes
Different
package
|non-subclass
An Access Example
The following example showsall combinations of the access control modifiers. This example
has two packages and five classes. Remember that the classes for the two
different
packages-in
packages need to be stored in directories named after their respective
this
The first class defines four int variables in each of the legal protectionmnodes. The variable n
is declared with the default protection, n_pri is private, n _pro is protected, and n_pub is
public.
Each subsequent class in this example will try to access the variables in an instance
of this class. The lines that will not compile due to access restrictions are commented out.
Before each of these lines is a commentlisting the places from which this level of protection
would allow access.
The second class, Derived, is asubclass of Protection in the same package, p1.This
grants Derived access to every variable in Protection except for n_pri, the private one. The
third class, SamePackage, is not a subclass of Protection,but is in the same package and
also has access to all but n_pri.
188 Part I: The Java Language
package pl;
public Protection () {
System. out.println("base constructor");
System.out.println ("n = " + n) ;
System.out.println( "n pri = " + n pri);
System,out.println ("n pro = " + n pro);
System. out.println ("n pub = " + n pub);
package pl;
package pl;
class SamePackage.
Same Package () {
Following is the source code for the other package, p2. The two classes defined in p2
COver the other twO conditions that are affected by access control. The first class, Protection2, is
subclasses. Finally, the class OtherPackage has access to only one variable, n_pub, which
was declared public.
This is file Protection2.java:
package p2:
class only
// System.out.println ("n pri " + n pri) ;
package p2;
class OtherPackage
OtherPackage () {
p1. Protection p = new pl.Protection ();
System.out.println("other package constructor") ;
class only
1/ System.out.println ("n pri = "+ p.n pri);
Importing Packages
Given that packages exist and are a good mechanism for compartmentalizing diverse classes
from each other, it is easy to see why allof the built-in Java classes are stored in packages.
There are no core Java classes in the unnamed default package; all of the standard classes
are stored in somenamed package. Since classes within packages must be fully qualified
with their name or names, it could become tedious to type in the long dot-separated
package
package path name for every class you want to use. For this reason,Java includes the import
statement to bring certain classes, or entire packages, into visibility. Once imported, a class
can be referred to directly, using only its name. The import statement is a convenience to
the programmer and is not technically needed to write a complete Java program. If you are
going to refer to a few dozen classes in your application, however, the import statement will
save a lot of typing.
In a Java source file, import statements occur immediately following the package
statement
(ifit exists) and before any class definitions. This is the general form of the
name of a subordinate
package inside the outer package separated by a dot (). There is no
practical limit on the
depth of a package hierarchy, except that imposed by the file system. Finally, you specify
Chapter 9: Packages and Interfaces 191
PAREE
CAUTION The forn mavy increase compilation
star
time--especially if you import several large
packages. For this reason itisagood idea to explicitly name the classes that you want to use
rather than importing whole packages. However, the star form has absolutely no effect on the
run-time performanceor size of your classes.
All of the standard Java classes included with Java are stored in a package called java.
The basic language functions are stored in a package inside of the java package called
java.lang.Normally, you have to import every package or cdass that you want to use,but
since Java is uselesswithout much of the functionality in java.lang, it is implicitly imported
by the compiler for all programs. This is equivalent to the following line being at the top of
all of your programs:
import java.lang.*;
Ifa class with the same name exists in two different packages that you import using the
star form, the compiler will remain silent, unless you try to use one of the classes. In that case,
you get a compile-time error and have to explicitly name the class specifyingits package.
will
must be emphasized
It that the import statement is optional. Any place you use a class
name,you can use its fullyqualified name, which includes its full package hierarchy. For
example, this fragment uses an import statement:
The same example without the import statement looks like this:
As shown in
Table 9-1, when a package is imported, only those items within the package
declared as public will be available to non-subclasses in the importing code. For example,
if you want the Balance class of the package MyPack shown earlier to be available as a
stand-alone class for general use outside of MyPack, then you will need todeclare it as
publicand put it into its own file, as shown here:
package MyPack;
String name;
double bal;
name = n;
bal = b;
if (bal<0)
System. out.print ("- -> ");
System. out.println (name + ": $" + bal) ;
As you can see, the Balance class is now public. Also, its constructor and its show()
method are public, too. This means that they can be accessed by any type of code outside
the MyPack package.For example, here TestBalance imports MyPack and is then able to
make use of the Balance class:
import MyPack. *;
class TestBalance
public static void main (String args []){
/* Because Balance is public, you may use Balance
class and call its constructor. */
Balance test = new Balance ("J. J. Jaspers", 99.88) ;
test.show (); // you may also call show ()
Asan experiment, remove the public specifier from the Balance class and then try