最近要做一个web app,其中要涉及到一段连接数据库的代码,我想把这些连接数据库的代码写在一个interface里,然后所有需要连接数据库的class都来implements它.问题就是,java中规定"interface中只能有方法的声明,不能有方法体",也就是说interface里的方法都是"空的",那么我之前想的方法就全泡汤了,根本不能把连接数据库的逻辑写进interface的方法中!只能给出方法的声明....但是,例如:象javax.servlet.servletContext接口里面的所有方法都是可以直接用的呀,那不就说明这些方法都有方法体吗?是不是interface中真的不能给出方法体呢?如果想实现我上面所说的目的,应该怎么做?希望高手指点

解决方案 »

  1.   

    呵呵,楼主该补补基础了interface里面只有方法的声明
    具体实现都是子类来实现的
    你看到的
    例如:象javax.servlet.servletContext接口里面的所有方法都是可以直接用的呀,那不就说明这些方法都有方法体吗?
    都是利用了多态性
      

  2.   

    楼上的高人能不能给写个示例具体说明一下例如javax.servlet.servletContext这个接口到底是怎么实现的
      

  3.   

    你这个应该用抽象类,abstract class
    懂吗?
      

  4.   

    username=sa
    password=sa
    url=jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=myDB
    driver=com.microsoft.jdbc.sqlserver.SQLServerDriver
    以上这些放在一个资源文件中,比如起名为config.properties然后写一个类专门用来绑定这个资源文件:
    import java.util.*;public class PropertyFile {
        public PropertyFile() {
        }    public static String getValue(String key) {
            ResourceBundle rb = ResourceBundle.getBundle("config");
            String temp = rb.getString(key);
            return temp;
        }}
    接着再写一个类,用来获取数据库连接!
    import java.sql.*;public class DBConnection {
        public static Connection getConnection() {
            Connection conn = null;
            String username = PropertyFile.getValue("username");
            String password = PropertyFile.getValue("password");
            String url = PropertyFile.getValue("url");
            String driver = PropertyFile.getValue("driver");        try {
                Class.forName(driver);
                conn = DriverManager.getConnection(url, username, password);
            } catch (SQLException ex) {
                ex.printStackTrace();
            } catch (ClassNotFoundException ex) {
                ex.printStackTrace();
            }
            return conn;
        }
    }
      

  5.   

    这就是抽象和接口的区别了.接口只可以声明方法,但是不能定义方法的实体.抽象类不但可以声明一个抽象方法,也可以在抽象方法里面加实体.不过接口和抽象最大的区别也就是在于一个类可以继承多个接口,可是只能有一个父类.这里接口和抽象的具体区别,希望对你有帮助.类似的地方:1)都不能产生实例,都不能用关键字new来生成实例。
    2)可以声明变量,但必须指向子类或实现类的对象等等。
    3)在接口中我们可以声明一个标记接口,在抽象类中我们也可以声明一个没有抽象方法的类作为抽象类。重要的区别:1)关于继承
    Java语言不支持多重继承,也就是说一个子类只能有一个父类,但一个子类可以实现多个接口。2)接口比抽象类具有更广泛的应用,也提供了更多的灵活性。
    3)接口内不能有实例字段,但抽象类中可以有实例字段及实现了的方法。
    4)接口内的方法自动为public型,但在抽象类中的抽象方法必须手动声明访问标识符。