是这个样子的,jdbc中规定的都是接口,留待数据库厂商在自己的驱动中实现。实际上调用得是数据库厂商的驱动中得类。这是所谓的上溯造型。
另外一方面这类的东东就没有过什么等于号右边是new ……,都是XXXX.XXXXX()

解决方案 »

  1.   

    其实你用这句话就知道为什么了:
    System.out.println(statement.getClass().getName());
      

  2.   

    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();//动态编译,自动选择正确的方法
    }

    test1.display();
    test2.display();
    test1.bbb();
    test2.ccc();
    }
    }
    看不懂请在提出
      

  3.   

    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\桌面>
    楼上的,我一编译就出现那么多问题啊,能具体写个通过编译的例子嘛?谢谢
      

  4.   

    cold_blooded(小熊) 写的不出错才怪!
    B、C类应该用implements而不是extends,估计是笔误吧!呵呵!
      

  5.   

    不过例子挺好的,请问cold_blooded(小熊) 这个是不是工厂模式呀?
      

  6.   

    回复人: icystone(石冰) ( ) 信誉:100 
    是这个样子的,jdbc中规定的都是接口,留待数据库厂商在自己的驱动中实现。实际上调用得是数据库厂商的驱动中得类。这是所谓的上溯造型。
    另外一方面这类的东东就没有过什么等于号右边是new ……,都是XXXX.XXXXX()
    ------------------------
    上溯造型 是什么呀?
    驱动中实现,是因为  Class.forName("org.gjt.mm.mysql.Driver");  这句吗?
      

  7.   

    希望 回复人: cold_blooded(小熊) 把程序修改一下,有错啊,要不我也不明白您要说明什么啊!
      

  8.   

    凡是被调用的都是非抽象类,但是它声明为接口类型,举个简单的例子吧
    List l=new ArrayList();
    l.add(new Object());List是接口,但是这是它的编译时类型,运行时他是ArrayList类
    你也可以写成
    ArrayList l=new ArrayList();
    但是这样就不符合面向接口编程,反正我看到这样的代码很反感