interface A { public display(); }abstract class B extends A { public display(){System.out.println("我是B类型");} public bbb(){System.out.println("我是B类专用方法");} }abstract class C extends A { public display(){System.out.println("我是C类型");} public ccc(){System.out.println("我是C类专用方法");} }class D extends B { public display(){System.out.println("我是B的子类");} public bbb(){} } class E extends C { public display(){System.out.println("我是C的子类");} public ccc(){} }public class Test { public static void main(String[] args){ A test1 = new D(); A test2 = new E(); Object[] o = {test1, test2}; for (int i = 0; i < o.length; i++) { (A)o.display();//动态编译,自动选择正确的方法 }
C:\Documents and Settings\braveheart\桌面>javac TestInterface.java TestInterface.java:3: <identifier> expected public display(); ^ TestInterface.java:3: = expected public display(); ^ TestInterface.java:8: invalid method declaration; return type requi public display(){System.out.println("我是B类型");} ^ TestInterface.java:9: invalid method declaration; return type requi public bbb(){System.out.println("我是B类专用方法");} ^ TestInterface.java:14: invalid method declaration; return type requ public display(){System.out.println("我是C类型");} ^ TestInterface.java:15: invalid method declaration; return type requ public ccc(){System.out.println("我是C类专用方法");} ^ TestInterface.java:20: invalid method declaration; return type requ public display(){System.out.println("我是B的子类");} ^ TestInterface.java:21: invalid method declaration; return type requ public bbb(){} ^ TestInterface.java:25: invalid method declaration; return type requ public display(){System.out.println("我是C的子类");} ^ TestInterface.java:26: invalid method declaration; return type requ public ccc(){} ^ TestInterface.java:37: not a statement (A)o.display();//动态编译,自动选择正确的方法 ^ 11 errorsC:\Documents and Settings\braveheart\桌面> 楼上的,我一编译就出现那么多问题啊,能具体写个通过编译的例子嘛?谢谢
System.out.println(statement.getClass().getName());
{
public display();
}abstract class B extends A
{
public display(){System.out.println("我是B类型");}
public bbb(){System.out.println("我是B类专用方法");}
}abstract class C extends A
{
public display(){System.out.println("我是C类型");}
public ccc(){System.out.println("我是C类专用方法");}
}class D extends B
{
public display(){System.out.println("我是B的子类");}
public bbb(){}
}
class E extends C
{
public display(){System.out.println("我是C的子类");}
public ccc(){}
}public class Test
{
public static void main(String[] args){
A test1 = new D();
A test2 = new E();
Object[] o = {test1, test2};
for (int i = 0; i < o.length; i++)
{
(A)o.display();//动态编译,自动选择正确的方法
}
test1.display();
test2.display();
test1.bbb();
test2.ccc();
}
}
看不懂请在提出
TestInterface.java:3: <identifier> expected
public display();
^
TestInterface.java:3: = expected
public display();
^
TestInterface.java:8: invalid method declaration; return type requi
public display(){System.out.println("我是B类型");}
^
TestInterface.java:9: invalid method declaration; return type requi
public bbb(){System.out.println("我是B类专用方法");}
^
TestInterface.java:14: invalid method declaration; return type requ
public display(){System.out.println("我是C类型");}
^
TestInterface.java:15: invalid method declaration; return type requ
public ccc(){System.out.println("我是C类专用方法");}
^
TestInterface.java:20: invalid method declaration; return type requ
public display(){System.out.println("我是B的子类");}
^
TestInterface.java:21: invalid method declaration; return type requ
public bbb(){}
^
TestInterface.java:25: invalid method declaration; return type requ
public display(){System.out.println("我是C的子类");}
^
TestInterface.java:26: invalid method declaration; return type requ
public ccc(){}
^
TestInterface.java:37: not a statement
(A)o.display();//动态编译,自动选择正确的方法
^
11 errorsC:\Documents and Settings\braveheart\桌面>
楼上的,我一编译就出现那么多问题啊,能具体写个通过编译的例子嘛?谢谢
B、C类应该用implements而不是extends,估计是笔误吧!呵呵!
是这个样子的,jdbc中规定的都是接口,留待数据库厂商在自己的驱动中实现。实际上调用得是数据库厂商的驱动中得类。这是所谓的上溯造型。
另外一方面这类的东东就没有过什么等于号右边是new ……,都是XXXX.XXXXX()
------------------------
上溯造型 是什么呀?
驱动中实现,是因为 Class.forName("org.gjt.mm.mysql.Driver"); 这句吗?
List l=new ArrayList();
l.add(new Object());List是接口,但是这是它的编译时类型,运行时他是ArrayList类
你也可以写成
ArrayList l=new ArrayList();
但是这样就不符合面向接口编程,反正我看到这样的代码很反感