首页新闻找找看学习计划

这个鸟问题一直没人能给个满意的答案?抽象类的问题

0
悬赏园豆:60 [已解决问题] 解决于 2012-05-12 19:51

基本三层+实体层Model

Model中 有一个类  AbClassA

然后有 ClassB 和 ClassC  都继承至AbClassA

 

在Dal层里 对应的 也有 AbclassA

然后有 ClassB 和 ClassC  都继承至AbClassA

AbClassA方法如下:

public abstract int add(Model.AbClassA modAbClassA);

 

ClassB中有如下方法:

public override int add(Model.ClassB modClassB);

 

ClassC中有如下方法:

public override int add(Model.ClassC modClassC);

 

为什么这样会报错,其实这种结构很常见啊,比如说 有 客户 供应商两个类,很容易抽象出 往来单位 这个类啊?抽象类 和 实现类中的方法 虽然参数不一样,但是 他们 也是有 抽象与具体类的联系的啊。、? 为什么不行, 你们在 三层中 就不用这样的抽象吗? 难道 客户供应商 各写各的?  那以后又要加别的 呢? 如 代理商 等等 ~!? 这个问题 问了不下 5次了。忘朋友指点啊~!?

问题补充:

我把问题重新叙述一下,望各位帮忙啊

Model层

public abstract class 往来单位{}

public class 客户:往来单位{}

public class 供应商:往来单位{}

public class 代理商:往来单位{}

 

Dal层

public abstract class 往来单位

{

  public abstract int add(Model.往来单位 mod往来单位){}

}

public class 客户:往来单位

{

     public override int add(Model.客户 mod客户){}

}

代理商 和 供应商 跟客户差不多就不写了。

 

注意这里Dal层两个类的方法的参数 一个是 mod往来单位  一个是  mod客户 这里报错了,但是 客户 是  往来单位的子类 为什么会报错呢?  我觉得我这样的抽象是很合理的啊。包括以后用到一些设计模式 肯定会 用到 抽象类 这样的啊, 一般三层中 增 删 改 查这些操作 都不能用抽象么?

变形精怪的主页 变形精怪 | 初学一级 | 园豆:5
提问于:2012-05-11 16:05
< >
分享
最佳答案
0

你model可以這樣設計。

但是對於dal層。

可以用泛型來處理。繼承一個統一的接口,或則加一個abstract 類。

如果非要你這樣的做,那在繼承類中,要和abstract 的方法簽名一樣。如果需要成功,在方法中需要進行轉換。轉換成實際的。

收获园豆:40
無限遐想 | 老鸟四级 |园豆:3740 | 2012-05-12 08:31

你一般遇到这样的问题的时候是怎么处理的呢? model做 抽象? bll层 dal层都不做抽象,各写各的吗?

变形精怪 | 园豆:5 (初学一级) | 2012-05-12 11:08

@jionsoft: 用接口。

無限遐想 | 园豆:3740 (老鸟四级) | 2012-05-12 11:12

@無限遐想: 你是數據庫操作。建議用泛型。如果繼承abstract,則必須實現虛方法。繼承abstract,只是由於實現不一樣。如果在虛方法中,做新增,修改,刪除操作的話,必須進行轉換,轉換成相應的實體,才可以的。

無限遐想 | 园豆:3740 (老鸟四级) | 2012-05-12 11:22

@jionsoft: 你現在隨便下載一個網上的代碼的實現 ,就明白了。還有建議你理解一下abstract 

無限遐想 | 园豆:3740 (老鸟四级) | 2012-05-12 11:23
其他回答(3)
0

我没有很明白你的意思,不过,从目前的理解来看,这个定义肯定不行。

你的抽象类定义的是public abstract int add(Model.AbClassA modAbClassA);,那么在派生类里也必须是public override int add(Model.AbClassA modAbClassA);而不能是public override int add(Model.ClassB modClassB);,假如你一定要public override int add(Model.ClassB modClassB);,那么你只能通过new这个操作符来控制。

收获园豆:20
无之无 | 园豆:5085 (大侠五级) | 2012-05-11 16:33

我说个场景估计你就知道我想问什么了。 比如我做一个进销存的软件,有如下几个类:客户 供应商 代理商

这3个类 很明显可以 抽象出一个 类来 即 往来单位, 那么 在 实体层就会写一个抽象类public abstract 往来单位这个类,然后 客户 供应商 代理商 这3个类都去实现这个类, 那在 往来单位这个抽象类里 定义 增 删 改查 操作,子类必须要去实现, 就会出现我上面提到的问题了,  还是我根本就不该这样设计? 你们在 多层设计的时候 会怎么 处理? 难道3个 类 各写各的?

支持(0) 反对(0) 变形精怪 | 园豆:5 (初学一级) | 2012-05-11 18:32

大哥 能给我个 你的联系方式么,这个问题 真的 困扰好久了。。

支持(0) 反对(0) 变形精怪 | 园豆:5 (初学一级) | 2012-05-11 18:47

@jionsoft: 68558710

支持(0) 反对(0) 无之无 | 园豆:5085 (大侠五级) | 2012-05-11 19:59
0

override的话,函数签名必须一致的啊

sinhbv | 园豆:2579 (老鸟四级) | 2012-05-11 16:55

我说个场景估计你就知道我想问什么了。 比如我做一个进销存的软件,有如下几个类:客户 供应商 代理商

这3个类 很明显可以 抽象出一个 类来 即 往来单位, 那么 在 实体层就会写一个抽象类public abstract 往来单位这个类,然后 客户 供应商 代理商 这3个类都去实现这个类, 那在 往来单位这个抽象类里 定义 增 删 改查 操作,子类必须要去实现, 就会出现我上面提到的问题了,  还是我根本就不该这样设计? 你们在 多层设计的时候 会怎么 处理? 难道3个 类 各写各的?

支持(0) 反对(0) 变形精怪 | 园豆:5 (初学一级) | 2012-05-11 18:32

@jionsoft: 肯定也是从基类来进行派生啊,不过,基类里定义了参数类型的,那没办法,只能按地个走

支持(0) 反对(0) sinhbv | 园豆:2579 (老鸟四级) | 2012-05-12 12:52
0

报的什么错误呢?

icyme | 园豆:77 (初学一级) | 2012-05-12 01:15
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册