"

10 Packages and Interfaces — Java Programming

10.1 Introduction

In this chapter, you will learn about how to define your own packages and a way of achieving multiple inheritance, which is done through interfaces. Thus, we consider the second form of reuse that is, reuse through polymorphism and learn how Java’s Interface mechanism supports this form of reuse. We will also compare interfaces and inheritance and inheritance.

10.2 Packages

Packages are containers for classes that are used to keep the class name space compartmentalized. Usually for all the Java programs we compile a .class file generated. Once a .class file is generated, we cannot have another .class file with same name. So, a programmer has to restrict himself while naming his classes. Here we use packages for flexibility. The package is both a naming and a visibility control mechanism. We can define classes inside a package that are not accessible by code outside that package. But the classes inside the package may have access.

Package definition

The general form of package is:

package pkgname;

We can have a hierarchy of packages..

The general form if a hierarchy of packages is

package pkg1[.pkg2[.pkg3]];

This is a multileveled package statement.

For example consider the package java.lang.ref

Package means java/lang/ref in the system. Hence according to the package definition, the directories should be created.

10.3 The CLASSPATH

CLASSPATH is an environment variable. All the programs we have executed so far have run well even though we have not used packages. This is because, CLASSPATH variable is set to the current working directory. And all the classes generated are in this directory. So, Java runtime considered this by default.

Creating a package and setting the CLASSPATH, is done like this. If your working directory is C:\jdk-16\bin then,

At c>type set as below

c>set

you will get all the variables and the values to which they are set. We need to set CLASSPATH and PATH. PATH is assigned a value currently. To that append string c:\jdk\bin. Then, set the CLASSPATH.

C> set CLASSPATH=.; c:\jdk\bin;c:\windows\java\classes

Now in, jdk\bin, create a directory mypkg. Now type and test the following programs.

Some standard packages are:

java.lang: The package for language. This is automatically imported in every class.

java.io: It contains all the classes that handle device independent i/o, files, and so on. This is automatically imported.

java.net: This contains classes that provide network functions, used for communication between computers.

java.util: This contains classes for system data, random number generation, data structure such as stacks and heaps.

Java.awt: This provides classes that create windows. And there are classes for windows, buttons, scroll bars etc.,

java.apple: Has classes related to applets.

 

Program 10.1 Write a program to demonstrate package

//  mypkg/student.java put this file in mypkg folder
//Click here for code
package mypkg;
public class student
{
int rollno;
int marks;
public student(int n,int m)
{
rollno=n;
marks=m;
}

public void display()
{
System.out.println("rollno="+rollno+"marks="+marks);
}
}
// C>mypkg>javac student.java. Now see that the class file is in mypkg folder
//studentClass.java

import mypkg.student;

public class studentClass

{

public static void main(String args[])

{

student stud= new student(25,90);

stud.display();

}

}
/*
C>javac studentClass.java
C> java studentClass.java

Output:

rollno=25 marks=90

*/

 

Anything declared public can be accessed from anywhere. Anything declared private in a class cannot be seen outside that class. When a member does not have an explicit access specification, it is visible to subclasses as well as to other classes in the same package. This is the default access. If you want to allow an element to be seen outside your current packages, but only to classes that subclass your class directly, then declare it as protected.

10.4 Class member access

The following table illustrates the access level.

Private

No modifier

Protected

Public

Same class

Yes

Yes

Yes

Yes

Same package subclass

No

Yes

Yes

Yes

Same package non subclass

No

Yes

Yes

Yes

Different package subclass

No

No

Yes

Yes

Different package non-subclass

No

No

No

Yes

10.5 Importing packages

Once packages of classes are written, we can use a class or the package of classes in another program’s class.

The general form of using package is:

importpkg1[.pkg2].(classname or *);

Classname is optional.

For example

java.io.*;

java.util.date;

Program 10.2  Write a program to demonstrate use of user created packages.

//student.java

package mypkg;

public class student{

int rollno;

int marks;

public student(int n, int m){

rolno=n;

marks=m;

}

public void display(){

System.out.println(“rollno=”+rollno+”marks=”+marks);

}

}

/* compile the above code as per the commands sjown below the source code and copy the .class file generated to ..\mypkg.

*/

//studClass.java

//The following is the code studClass.java which is also in

//c:\java\bin

import mypkg.student;

class studclass{

public static void main(String args[]){

student stud[]=new student[3];

stud[0]=new student(25,90);

stud[1]=new student(26,93);

stud[2]=new student(27,79);

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

stud[i].display();

}

}

/*

rollno=25marks=90
rollno=26marks=93
rollno=27marks=79

*/

10.6 Interfaces

Interface is an important concept in Java through which multiple inheritance is achieved. With interface we can specify what a class must do, but not how it does it. Once defined, any number of classes can implement an interface. One class can implement any number of inheritances. This is one aspect of polymorphism. We think of an interface as a pure abstract class. It allows the creator to establish the form for a class: method names, arguments lists and returns types, but no method bodies. An interface can also contain data members of primitive types, but these are implicitly public, static and final. An interface provides only a form, but not implementation. Methods in interface are public and abstract.

To create an interface, use the inheritance key word instead of class keyword. Like a class, you can add the public keyword before the interface keyword(but only if that interface is defined in a file of same name) or leave it off to give ‘friendly’ status. The methods in the interface must be public. We must code every method in interface.

We can also extend an interface with inheritance.

interface p1{

—

—

}

interface p2 extends p1{

—

—

}

//Program 10.3 Write a program to demonstrate the use of variables in interfaces.

//printGrade.java

//click here for code

import java.util.*;

interface markgrade{

int distinction=0;

int first=1;

int second=2;

int third=3;

int fail=4;

}

class marks implements markgrade{

Random rand=new Random();

int findgrade(){

int mark=(int)(100*rand.nextDouble());

System.out.println("marks="+mark+" Result=");

if(mark<40)

return fail;

else if(mark>=40 && mark <50)

return third;

else if(mark>=50 && mark <60)

return third;

else if(mark>60 && mark <70)

return third;

else

return distinction;

}

}

class printGrade implements markgrade{

static void answer(int result){

switch(result){

case distinction:

System.out.println("Distinction");

break;

case first:

System.out.println("first");

break;

case second:

System.out.println("second");

break;

case third:

System.out.println("third");

break;

case fail:

System.out.println("fail");

break;

}

}

public static void main(String args[]){

marks m= new marks();

answer(m.findgrade());

answer(m.findgrade());

answer(m.findgrade());

answer(m.findgrade());

}

}

/*
Output:
marks=33 Result=
fail
marks=36 Result=
fail
marks=51 Result=
third
marks=29 Result=
fail
*/

10.7 Use of interfaces

1. An abstract can be defined and methods can be implemented later.

2. We can put restrictions on access of members thus producing security.

3. We can declare methods that can be implemented later.

4. We can inherit properties of several classes thus achieving multiple inheritance.

10.8 Summary

In this chapter, you have learned about packages, their definition, usage and different ways of implementing interfaces.

License

Icon for the Creative Commons Attribution-ShareAlike 4.0 International License

Java Programming Copyright © by Valli Kumari Vatsavayi and KBS Phanindra Varma is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License, except where otherwise noted.