求助一个关于抽象的问题,请各位老大指点

来源:百度知道 编辑:UC知道 时间:2024/05/16 09:53:50
假如我要用面向对象的角度去考虑做一个问卷发布系统

问卷分两种:
一个是调查问卷,用户选择完提交,不会得到任何反馈.比如:”您对当前站点的风格是否满意”.用户选择一个答案提交.

一种是测试问卷,用户做完会根据选择答案的总分段得到一个结果反馈回来.比如:”测试你是否是一个受人欢迎的角色?”有几道题,用户选择得到一个总分,根据分值得到一个结果.

现在我考虑应该大概有几个对象:问卷(抽象类),调查问卷(继承于问卷),测试问卷(继承于问卷),选项(对象集合),测试结果(测试问卷的反馈)

选项和测试结果与问卷是组合关系,然后创建问卷的时候就用抽象代替实例.

现在我有个问题,关键在于问卷的测试结果这个属性,子类和父类应该是is的关系是吧,那么父类是否应该拥有子类的全部属性呢?问卷抽象类是否应该包含这个测试结果属性呢?如果包含的话调查问卷没有结果怎么办?不包含又怎么用抽象类的引用来代替测试问卷的引用呢?不包含就引不到这个属性了.

这个问题应该怎么去做抽象呢?小弟水平比较菜,对面向对象不甚了解,请各位老大指点迷津,谢谢了!
谢谢1楼的兄弟回答,不过还是没有太明白你的意思,我可能没有叙述清楚

我的意思是我的父类是否应该设计“测试结果”这个属性,这个属性应该改是一个集合类,但是现在调查问卷没有这个属性,测试问卷具有这个属性,应该如何考虑?

那么如果父类不包含这个属性,那么我在客户端代码应用的时候使用父类的抽象引用代替子类的实例引用时,没有办法使用这个属性了,怎么解决呢?

应该是个简单的问题,我一时转不过来弯了。

那么如果客户端将父类的抽象引用强制转换成子类类型,这样的代码会不会对以后的扩展造成困难呢?这样客户端代码在遇到调查问卷和测试问卷时还需要一个判断语句,来确定对象的类型吧.
这样会不会影响代码的扩展呢?比如增加一个子类对象?

如果要通过父类抽象实例访问子类的属性
可以这样:
((子类名)父类实例).属性

但是要保证这个实例能转化为子类的实例,否则会报错。

父类只是用于设计一个规范,给所有的子类定义出一些共有的属性方法,它没有必要也不可能包含所有子类的属性方法,
而每个子类都有各自的个性,就是它们自己的属性方法

也就是说:你的问卷,只要包含调查问卷,测试问卷都具有的属性方法就可以了
而测试结果是测试问卷所独有的属性,就放在测试问卷类中就好。

别看那么复杂 其实很简单
子类不就是多了个对喜欢对象的描述吗?
子类完全可以替代父类的作用

子类比父类多了个调查项数的INT
然后用这个INT 循环NEW子类继承而得到的父类属性

根据你的需要个方法来得出测试结果 结果实际是做成返回值 或者属性都可以