发帖    主题    评论    推荐    标签    作者    订阅    查搜    注册   登陆   关注
 
面向对象 设计模式 领域驱动设计 企业架构 框架 开发教程 微服务 大数据 扩展性 并发编程 事件驱动 分布式 SOA
1 2 3 4 ... 6 下一页 Go 6

有关interface和abstract class的选用

              
2003-05-29 09:26
赞助商链接

我工作中碰到这样的情况
当可以使用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
}

}

2003-05-29 13:35

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

cc
2003-05-31 11:49

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

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

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

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

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

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 下一页

赞助商链接

赞助商链接

返回顶部

移动版 关于本站 使用帮助 联系管理员 最佳分辨率1366x768
OpenSource JIVEJDON Powered by JdonFramework Code © 2002-20 jdon.com