import  java.sql.*;
public class ConnToDataBase 
{
Connection con=null;
public Connection connToDB()

try
{
Class.forName("oracle.jdbc.driver.OracleDriver");
con=java.sql.DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:FREEDOM", "scott","tiger");
}
catch(Exception e)
{
e.printStackTrace();
}
return con;
}

public static void main(String [] args)
{
ConnToDataBase db=new ConnToDataBase();
db.connToDB();//这句返回的是Connection接口,为何能运行通过?
System.out.println(db.connToDB().toString());


}关于java调用方法后,返回类型操作问题。上述程序db.connToDB()执行后,应返回Connection类型的接口,也就是说,应该执行Connection c=db.connToDB()操作才能通过编译,但是上述程序却能通过执行,何解?请指点

解决方案 »

  1.   

    如果一个类A实现了Connection接口,虽然Connection不能实例化,但是可以声明一个Connection类型的对象名存放实现了这个接口的类的实例Connection obj=new A();那些调用的方法实际都是在类A中实现的,通过obj调用的是A类中的方法
    ----------------------------------
    一个接口可以有多种实现····声明为接口类型其实返回的是一个接口的实现类···
      

  2.   

    Java 沿袭了当初 C 语言的传统,就是说,对于一个有返回值的函数,语法上并不要求一定要用一个赋值语句把这个值传给某个变量。这一点上,它们并不像 Visual Basic 或者 VBScript 那样严格区分 function call 和 procedure call。不过,像你这段程序:
        ConnToDataBase db=new ConnToDataBase();
        db.connToDB();//这句返回的是Connection接口,为何能运行通过?
        System.out.println(db.connToDB().toString());
    虽然能编译通过,但运行时因为 connToDB() 被调用了两次,那么事实上是建立了两个跟数据库的连接。这恐怕并不是你的初衷吧?
      

  3.   

    Connection con=null;
    这个声明表明了con是类成员变量;只要在这个类中无论任何位置都起作用