404 lines
6.3 KiB
Java
404 lines
6.3 KiB
Java
|
/* Test interface dispatch, type checking (instanceof), and casting. */
|
||
|
|
||
|
interface IA
|
||
|
{
|
||
|
String a();
|
||
|
}
|
||
|
|
||
|
interface IB extends IA
|
||
|
{
|
||
|
String b();
|
||
|
}
|
||
|
|
||
|
interface IC extends IB
|
||
|
{
|
||
|
void c();
|
||
|
int d();
|
||
|
IB e(int i);
|
||
|
}
|
||
|
|
||
|
interface ID
|
||
|
{
|
||
|
String z();
|
||
|
String a();
|
||
|
}
|
||
|
|
||
|
class CA
|
||
|
{
|
||
|
String a()
|
||
|
{
|
||
|
return "CA a()";
|
||
|
}
|
||
|
}
|
||
|
|
||
|
class CB implements IB
|
||
|
{
|
||
|
public String a()
|
||
|
{
|
||
|
return "CB a()";
|
||
|
}
|
||
|
|
||
|
public String b()
|
||
|
{
|
||
|
return "CB b()";
|
||
|
}
|
||
|
}
|
||
|
|
||
|
class CC extends CB
|
||
|
{
|
||
|
public int d()
|
||
|
{
|
||
|
return 99;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
class CD extends CC implements IC
|
||
|
{
|
||
|
public String a()
|
||
|
{
|
||
|
return "CD a()";
|
||
|
}
|
||
|
|
||
|
public void c()
|
||
|
{
|
||
|
System.out.println("CD c()");
|
||
|
}
|
||
|
|
||
|
public int d()
|
||
|
{
|
||
|
return 6;
|
||
|
}
|
||
|
|
||
|
public IB e(int i)
|
||
|
{
|
||
|
if (i == 1)
|
||
|
return new CB();
|
||
|
else
|
||
|
return new CD();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
class CE extends CB implements IB, ID
|
||
|
{
|
||
|
public String a()
|
||
|
{
|
||
|
return ("CE a()");
|
||
|
}
|
||
|
|
||
|
public String b()
|
||
|
{
|
||
|
return ("CE b()");
|
||
|
}
|
||
|
|
||
|
public String z()
|
||
|
{
|
||
|
return("CE z()");
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
public class InterfaceDispatch
|
||
|
{
|
||
|
public static void main(String args[])
|
||
|
{
|
||
|
new InterfaceDispatch();
|
||
|
}
|
||
|
|
||
|
public InterfaceDispatch()
|
||
|
{
|
||
|
/* _Jv_InstanceOf */
|
||
|
|
||
|
/* Object instanceof CLASS */
|
||
|
Object obj = new CA();
|
||
|
|
||
|
if (obj instanceof CA)
|
||
|
{
|
||
|
System.out.println ("ok 1");
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
System.out.println ("FAIL 1");
|
||
|
}
|
||
|
|
||
|
obj = new CD();
|
||
|
|
||
|
if (!(obj instanceof CA))
|
||
|
{
|
||
|
System.out.println ("ok 2a");
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
System.out.println ("FAIL 2a");
|
||
|
}
|
||
|
|
||
|
if (obj instanceof CB)
|
||
|
{
|
||
|
System.out.println ("ok 2b");
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
System.out.println ("FAIL 2b");
|
||
|
}
|
||
|
|
||
|
|
||
|
/* Object instanceof INTERFACE */
|
||
|
obj = new CB();
|
||
|
|
||
|
if (!(obj instanceof IC))
|
||
|
{
|
||
|
System.out.println("ok 3");
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
System.out.println ("FAIL 3");
|
||
|
}
|
||
|
|
||
|
if (obj instanceof IB)
|
||
|
{
|
||
|
System.out.println("ok 4");
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
System.out.println ("FAIL 4");
|
||
|
}
|
||
|
|
||
|
/* InterfaceRef instanceof INTERFACE */
|
||
|
|
||
|
IA ia = new CB();
|
||
|
|
||
|
if (ia instanceof IB)
|
||
|
{
|
||
|
System.out.println("ok 5");
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
System.out.println ("FAIL 5");
|
||
|
}
|
||
|
|
||
|
|
||
|
if (!(ia instanceof IC))
|
||
|
{
|
||
|
System.out.println("ok 6");
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
System.out.println ("FAIL 6");
|
||
|
}
|
||
|
|
||
|
/* InterfaceRef instanceof CLASS */
|
||
|
|
||
|
if (ia instanceof CB)
|
||
|
{
|
||
|
System.out.println("ok 7");
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
System.out.println ("FAIL 7");
|
||
|
}
|
||
|
|
||
|
|
||
|
if (!(ia instanceof CD))
|
||
|
{
|
||
|
System.out.println("ok 8");
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
System.out.println ("FAIL 8");
|
||
|
}
|
||
|
|
||
|
|
||
|
/* _Jv_CheckCast */
|
||
|
Object obj_ca = new CA();
|
||
|
Object obj_cc = new CC();
|
||
|
|
||
|
IA ia2;
|
||
|
|
||
|
try
|
||
|
{
|
||
|
ia2 = (IA) obj_cc;
|
||
|
System.out.println("ok 9");
|
||
|
}
|
||
|
catch (ClassCastException x)
|
||
|
{
|
||
|
System.out.println("FAIL 9");
|
||
|
}
|
||
|
|
||
|
CD cd;
|
||
|
|
||
|
try
|
||
|
{
|
||
|
cd = (CD) obj_ca;
|
||
|
System.out.println("FAIL 10");
|
||
|
}
|
||
|
catch (ClassCastException x)
|
||
|
{
|
||
|
System.out.println("ok 10");
|
||
|
}
|
||
|
|
||
|
IA ia3;
|
||
|
|
||
|
try
|
||
|
{
|
||
|
ia3 = (IB) obj_ca;
|
||
|
System.out.println("FAIL 11");
|
||
|
}
|
||
|
catch (ClassCastException x)
|
||
|
{
|
||
|
System.out.println("ok 11");
|
||
|
}
|
||
|
|
||
|
/* _Jv_LookupInterfaceMethod */
|
||
|
Object obj_cb = new CB();
|
||
|
|
||
|
IB ib = (IB) obj_cb;
|
||
|
ib.b();
|
||
|
if (ib.a().equalsIgnoreCase("CB a()"))
|
||
|
System.out.println("ok 12");
|
||
|
else
|
||
|
System.out.println("FAIL 12");
|
||
|
|
||
|
IC ic = new CD();
|
||
|
if (ic.a().equalsIgnoreCase("CD a()"))
|
||
|
System.out.println("ok 13");
|
||
|
else
|
||
|
System.out.println("FAIL 13");
|
||
|
|
||
|
if (ic.d() == 6)
|
||
|
System.out.println("ok 14");
|
||
|
else
|
||
|
System.out.println("FAIL 14");
|
||
|
|
||
|
Object ce = new CE();
|
||
|
|
||
|
ib = (IB) ce;
|
||
|
ID id = (ID) ce;
|
||
|
|
||
|
if (ib.b().equals("CE b()") && id.a().equals("CE a()"))
|
||
|
System.out.println("ok 15");
|
||
|
else
|
||
|
System.out.println("FAIL 15");
|
||
|
|
||
|
String t = ((ID)ce).z();
|
||
|
|
||
|
if (t.equalsIgnoreCase("CE z()"))
|
||
|
System.out.println("ok 16");
|
||
|
else
|
||
|
System.out.println("FAIL 16");
|
||
|
|
||
|
/* Array types */
|
||
|
|
||
|
Object[] obj_a = new CC[10];
|
||
|
try
|
||
|
{
|
||
|
CB[] ca_a = (CB[]) obj_a;
|
||
|
System.out.println("ok 17");
|
||
|
}
|
||
|
catch (ClassCastException x)
|
||
|
{
|
||
|
System.out.println("FAIL 17");
|
||
|
}
|
||
|
|
||
|
if (obj_a instanceof IB[])
|
||
|
{
|
||
|
System.out.println("ok 18");
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
System.out.println("FAIL 18");
|
||
|
}
|
||
|
|
||
|
IB[] ib_a = new CD[5];
|
||
|
try
|
||
|
{
|
||
|
CD[] cd_a = (CD[]) ib_a;
|
||
|
System.out.println("ok 19");
|
||
|
}
|
||
|
catch (ClassCastException x)
|
||
|
{
|
||
|
System.out.println("FAIL 19");
|
||
|
}
|
||
|
|
||
|
CA[] ca_a;
|
||
|
|
||
|
try
|
||
|
{
|
||
|
ca_a = (CA[]) ib_a;
|
||
|
System.out.println("FAIL 20");
|
||
|
}
|
||
|
catch (ClassCastException x)
|
||
|
{
|
||
|
System.out.println("ok 20");
|
||
|
}
|
||
|
|
||
|
|
||
|
/* Primitive types */
|
||
|
|
||
|
short[] short_a = new short[100];
|
||
|
|
||
|
try
|
||
|
{
|
||
|
obj = short_a;
|
||
|
System.out.println("ok 21");
|
||
|
}
|
||
|
catch (ClassCastException x)
|
||
|
{
|
||
|
System.out.println("FAIL 21");
|
||
|
}
|
||
|
|
||
|
try
|
||
|
{
|
||
|
short[] short_b = (short[]) obj;
|
||
|
System.out.println("ok 22");
|
||
|
}
|
||
|
catch (ClassCastException x)
|
||
|
{
|
||
|
System.out.println("FAIL 22");
|
||
|
}
|
||
|
|
||
|
int[] short_b;
|
||
|
|
||
|
try
|
||
|
{
|
||
|
short_b = (int[]) obj;
|
||
|
System.out.println("FAIL 23");
|
||
|
}
|
||
|
catch (ClassCastException x)
|
||
|
{
|
||
|
System.out.println("ok 23");
|
||
|
}
|
||
|
|
||
|
Object obj1 = new int[25];
|
||
|
|
||
|
if (obj1 instanceof short[])
|
||
|
{
|
||
|
System.out.println("FAIL 24");
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
System.out.println("ok 24");
|
||
|
}
|
||
|
|
||
|
if (obj1 instanceof int[])
|
||
|
{
|
||
|
System.out.println("ok 25");
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
System.out.println("FAIL 25");
|
||
|
}
|
||
|
|
||
|
/* null assignment */
|
||
|
|
||
|
CA obj_ca2 = null;
|
||
|
|
||
|
if (obj_ca2 instanceof CA)
|
||
|
{
|
||
|
System.out.println("FAIL 26");
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
System.out.println("ok 26");
|
||
|
}
|
||
|
}
|
||
|
}
|