Java Interfaces
——————
Are public method prototype and behaviour. We make use of the “interface” keyword.
It is like an abstract class with two differences:
1. A class can inherit from only one class, but can “implement” as many interfaces you want.
2. A Java interface
cannot implement any methods at all.
nor cannot include any fields except “static final” constants
Only contains method prototype and constants.
//Nukeable.java public interface Nukeable{ public void nuke(); // no body }
// in java.lang public interface Comparable{ public int compareTo(Object o); }
public class SList extends List implements Nukeable, Comparable{ // all that matters public void nuke(){ head = null; size = 0; } public int compareTo(Object o){ // code that retruns a number thats less than 0 if <0 and 0 if =0 and >0 if >0 } }
Nukeable n = new SList(); // correct! Comparable c = (Comparable)n; // need to use a cast as some Nukeable are not Comparable n.nuke(); if (c.compareTo > 0){ // do something }
Arrays class in java.util sorts arrays of Comparable objects.
public static void sort(Object[] a){ }
Runtime error occurs if any item in a is not Comparable. An interface can have a subinterface and it can itself have sub interfaces.
//NOTE this!! public interface NukeAndCompare extends Nukeable, Comparable{ }
Java Packages
—————
Package is a collection of classes, Java interfaces and subpackages.
Three benifits:
1. Packages can contain hidden classes not visible outside package.
2. Classes can have fields and methods visible inside the package only.
3. Different packages can have classes with same name.
Example: java.io standard library.
Using Packages
—————-
Fully qualified name:
java.lang.System.out.println(); import java.io.File; // can now refer to File class import java.io.*; // refer to all things in io
Every program implicitly import java.lang.*
Also x.y.z.Classfile should be in x/y/z/Classfile.class
Building packages
——————
//list/SList.java package list; public class SList{ SListNode head; int size; }
//list/SListNode.java package list; class SListNode{ //"Package protection" Object item; //"Package protection" SListNode list; //"Package protection" }
Package protection is between private and protected.
A class/variable has package protection is visible to any class in the same package.
But it is not visible at all outside the package. ie files outside that directory.
The files that are outside only see the public classes/methods inside the package.
Public class must be declared in a file named after the class. The “package” class can appear in any *.java file.
Compiling and running
———————–
Must be done from outside the package.
//How to compile? javac -g list/SList.java javac -g list/ *.java javac -g heap / *.java / *.java // this takes care of dependancies also
// How to run? java list.Slist
The four levels of protection
——————————-
in same package in a subclass everywhere 1. public x x x 2. protected x x 3. package x 4. private