Converting C++ Abstract Classes into java Interface
One of the most innovative aspects of Java is the interface. As explained earlier in this book, an interface specifies the form of its various methods without specifying any implementation details. Each class that implements In interface does so by creating the actual methods declared by the interface. Thus, in Java an interface is the means by which you can define the general form of a class while ensuring that all specific versions of the class conform to the same set of rules. The interface is one of the ways that Java provides support for polymorphic. In C++, there is no direct parallel to the interface. Instead, in C++, if you wish to define the form of a class without defining implementation details, you must do so by “using an abstract class: Abstract classes in C++ are similar to abstract classes in Java; they do not contain a full set of implementation details. In C++, an abstract class con attain least one pure virtual function. A pure virtual function defines no implementation; it only defines the function prototype. Thus, a pure virtual function in C++ is Essen sally . the same as an abstract method in Java. In C++, abstract classes serve a function similar to interfaces in Java. For this reason, they are one of the items that you will want to watch for when converting code to Java. While not all C++ abstract classes can be converted into Java interfaces, many can. Let’s look at two examples. Here is a short C++ program that uses an abstract class called Int List to define the form of an integer list. An implementation of this class is created by Int Array, which uses an array to implement a list of integers.
In this program, the abstract class Int List defines only the form of an integer list. It
contains only pure virtual functions and does not declare any data. For these reasons, it can be made into an interface when the program is converted into Java.
As you can see, there is nearly a one-to-one correspondence between the c++ abstract class and the Java interface possible to convert into because it contained only pure virtual functions. This is the key. If had contained any data or function implementations; then it would not have qualified for conversion into an interace.When you convert or adapt C:t-+code into Java, look for examples of abstract
classes that contain only pure virtual functions. These are prime candidates for conversion to Java interfaces. But don’t overlook abstract c++ classes that contain a small number of implemented functions or data. It is possible that these items don’t really belong in the abstract class to begin with and should be defined by individual implementations. Since C++ does not define an interface construct, there was no reason for C++ programmers 10 think in terms of one Sometimes concrete member is contained in an otherwise abstract class simple for expedience-not because it is the most logical place for it. For example, consider the following abstract C++ class:
The only reason that this class cannot be made into a Java interface is the existence
of isOK. Presumably, isOK is used to indicate some status associated with the class.
However, if you think about it, there really is no reason for is OK to be defined as a
variable. Instead, you could specify a method called is OK( ) that returns the status.
In this approach, is OK( ) will,be defined, along with the other methods, by any implementing class. Thus, you could convert the preceding c++ abstract class into the following Java interface.