#940 Erroneous IncompatibleClassChangeError

emitter (227)

I have an abstract class which "implements" an
interface but does not define the methods of that
interface (hence making the class abstract).

I compile this class using Jikes 1.22, with the
"-target 1.1" option.

Jikes gives no warnings or errors.

Java 1.1.8 fails to load the class, reporting an
IncompatibleClassChangeError due to an unimplemented
interface method in the abstract class.

Example: a single file, Run.java, containing:


public class Run
public static void main(String[] args)
Class c = BadAbstract.class;

abstract class BadAbstract implements MyInterface
// With this method commented out, Jikes 1.22 (with
the "target 1.1" flag supplied)
// happily compiles this source file, but Java
1.1.8 fails to load the resulting class
// file.
//public abstract String my_method();

interface MyInterface
public String my_method();



Compile with Jikes 1.22 using the command:
> jikes -target 1.1 Run.java

Run using Java 1.1.8 using the command:
> java Run

The result is:

java.lang.IncompatibleClassChangeError: Unimplemented
interface method
at Run.class(Run.java:0)
at Run.main(Run.java:6)

Note that
1) The class loads without errors in Java 1.3
2) Uncommenting the marked line in BadAbstract makes
the problem go away.

Submitted by malcolmwood76@yahoo.co.uk


Log in to post a comment.