有关interface和abstract class的选用

03-05-29 chilopod
              

我工作中碰到这样的情况

当可以使用abstract class 与interface时,该用哪个呢

如下的例子:

每个子类都有sheet,但是如果我选用abstract class,并把sheet作为成员变量时,abstract class中的方法没有用到sheet,只有在子类中才用到.在这种情况下,该选用哪个呢? 请大家发表一下看法

import java.util.ArrayList;

public interface ExcelRead

{

/**

返回ArrayList,其中ArrayList中每个元素为HashMap.

@roseuid 3ED40ED40360

*/

public abstract ArrayList getRecords();

/**

@roseuid 3ED426540194

*/

abstract Object getRecord(int i);

}

import java.util.ArrayList;

import java.util.HashMap;

import jxl.*;

public class BudgetDetail implements ExcelRead

{

private Sheet sheet;

public BudgetDetail()

{

ExcelSheet excelSheet = new ExcelSheet("input.xls",1);

sheet = excelSheet.getSheet();

}

public ArrayList getRecords()

{

//用到sheet

}

public Object getRecord(int i)

{

//用到sheet

}

}

              

l3936525
2003-05-29 13:35

interface会阻止任何函数被定义出来,以及阻止产生任何对象

cc
2003-05-31 11:49

用接口或是抽象类的选择简单的说

一方面在于你有没有公用的代码可以提取到父层次。

一旦你用了抽象类你就不能再多重继承了。

如果你有公用代码可提取,而又不需要去多重继承,那就用抽象类好了。

新手拿不定主义的时候就用抽象类。

bruce
2003-06-02 05:47

just as what cc said

抽象类你就不能再多重继承了

The functions in java interface is like virtual functions in C++. We can not implement the detail things in these functions.

It seems that, if there is a class A1 inherited from abstract class A, A has method1(detail implementation) , but A1 has not method1 implementation.

So a1 = new A1();

a1.method1() will actually call A.method1().

Since I became a student several years ago, I almost forgot my previous work thing, hope exchange idea. Thanks.

cc
2003-06-02 08:58

接口是“like a ”象一个什么东西、或是具备什么功能

抽象类是 “ is a ”是一个什么东西。

一个带锁的门,那么一定是 “somthing extends 门 impliment 锁 ”

决不能说 “带门的锁”

6Go 1 2 3 4 ... 6 下一页