jdbc连接,Statement.isClosed()方法调用问题

用JDBC连接数据库,关闭资源时,调用statement.isclosed()会出现AbstractMethod错误,上网搜了一下,一种说法是Statement的具体实现类没有实现isClosed()方法,但是接口的方法在实现类中不是必须得全部实现吗?迷惑。。。
顺便搜了一下Abstract类和Interface的区别与联系,如下:
抽象类是对某一类型的事物,在编程时,为了描述这类事物,而高度抽象、总结出来的一种基础类型。这么说还是很晦涩,打个比方好了,就好比说动物,动物就是一种抽象类,当我们说动物的时候,我们可以想象出很多种具体的动物类别,比如,猪、狗、老虎、狮子,这些都是继承了“动物”这个抽象类而实现了各自特有属性特征的具体子类。

抽象类有几个必要因素:

1、抽象类不能实例化。

2、抽象类可以含有抽象方法和其他带有抽象标志的访问器。(什么是抽象方法,我们接着说。)

3、抽象类是用来给其他类继承的,所以,我们不能用sealed来修饰抽象类,不然就矛盾了。

4、如果抽象类中含有抽象方法或其他带有抽象标志的访问器,在派生自这个抽象类的子类中,必须明确实现这些抽象方法和访问器。

二、接口interface的理解。

关于接口的概念,很好说,我也不在这里赘述。关键是如何理解接口。我们可以把接口看作是一种“can do something”的抽象。也打个比方,是个经典的比方,鸟和飞机是两种不同的类别,但是鸟会飞,飞机也会飞,它们都会飞“can fly”,但是他们飞的原理是不同的,但实际他们达到的目的是相同的。所以我们可以写一个飞的接口,让这两个类都实现飞的目的。

为什么要这么做呢?这就是面向对象的编程技巧,我们需要考虑到代码的可读性,扩展性。我们定义了接口,就好比我们订立了一种契约,合同或者说标准。我们必须严格按照这种契约去做事情,正所谓有规矩才成方圆,这样才能更有条理,更有效率地编写代码。

三、抽象类和接口取舍建议。

其实,说道这里,都会发现,抽象类和接口在实现某一种方法的机制上面其实是很相似的,都先定立一种条约,然后子类必须实现他们。我们究竟如何使用他们呢,首先看看他们的区别:

当我们需要订立的约定内容需要作为参数传递的话,我们就要用接口,抽象类中的抽象方法就不那么方便了。
子类只能继承一个抽象类,但是可以继承多个接口。如果我们有一组类需要实现同样的方法,如果用抽象类,那么所有的这些子类的基类都必须是这些抽象类。
抽象类可以有具体实现过的方法或者其他成员,但是接口不行,接口中的成员都不可以有具体的实现。

而后这里有几点官方的建议:

如果我们希望所写的组件有多个版本,或者说所写的组件需要经常更新,那么建议用抽象类。因为我们可以通过简单的方法来更新基类从而更新我们的组件。但是接口不一样,接口就好比合同,一但订立,就很难去更改。如果我们需要有一个新版本的接口,那么我们需要重新写这个接口。因为我们无法通过更改接口来更新实现这些接口的子类。
如果我们所设计的功能可适用于具有相当大差异性的对象们,那么我们建议采用接口。抽象类适用于差异性较小的对象之间所要实现的功能。
如果我们需要设计简单的,小型的功能,我们使用接口。如果我们需要设计大型的功能性单元,使用抽象类。
如果我们需要提供一种在所有组件中用到的公共的,实现好的功能模块,我们使用抽象类,抽象类可以部分实现成员,但是接口不可以实现任何成员。

你可能感兴趣的:(java)