问题描述
如图 求解
解决方案
解决方案二:
无法改例题,如何打代码才能读取到StockQuantity类中,子类DiscreteQuantity中的变量呢
解决方案三:
?????????那不是你传过来的么,还需要说什么呢??如果这个quanXXX(图太小字看不清)的是那个StockQuantity抽象类的字段,那么直接调用如果不是抽象类里面有的东西,那请先用is判定一下他是否是这个DiscreteQuantity类,如果是就用as转换一下,如果不是抛出主动抛出异常说明参数不符合要求当然这里也可以用泛型,泛型怎么写我就不说啥了,如果你有兴趣可以自己改
解决方案四:
DiscreteQuantityquantity=newDiscreteQuantity();stock.Add(quantity)
不就是这样么……
解决方案五:
如果你说的是你那个quantity字段的话,因为它不属于父类,所以不可能直接访问,看你类名,也可以猜测你必须与stockquantity配对,所以你可以直接在stock方法里面判断传入的stockquantity是不是对应的子类,如果不是,返回异常
解决方案六:
楼主意思是要在add方法里面调用StockQuantity的子类的quantity变量?可以是这样publicoverridevoidadd(StockQuantityquantity){if(quantityisDiscreteStockQuantity){intresult=(quantityasDiscreteStockQuantity).quantity;}}
解决方案七:
这个设计本身就是荒唐的了。你的既然以StockQunatity为(抽象)接口标准,怎么又纠结到更底下的类型才有的个性?既然如此,你在声明参数时为什么不把quantity参数声明为子类,而非要装得很“抽象”呢?
解决方案八:
遇到这种问题,你应该重构根本的类型设计,而不是去为了技术而技术。如果不从设计出发,而是纠结编程技术,那么很快就成了整天玩儿繁琐诡异的代码的怪物程序了。
解决方案九:
具体点说,就是左边的quantity字段/属性应该是父类的,而不是子类的。如果不重构设计问题,那么你可以对给你设计左边两个class的人说:“对不起,这么简单的东西都胡乱设计,我不陪你玩儿编程了”。这样才能保证解决设计问题。
解决方案十:
引用8楼sp1234的回复:
具体点说,就是左边的quantity字段/属性应该是父类的,而不是子类的。如果不重构设计问题,那么你可以对给你设计左边两个class的人说:“对不起,这么简单的东西都胡乱设计,我不陪你玩儿编程了”。这样才能保证解决设计问题。
我会转告我大学老师的
解决方案十一:
引用8楼sp1234的回复:
具体点说,就是左边的quantity字段/属性应该是父类的,而不是子类的。如果不重构设计问题,那么你可以对给你设计左边两个class的人说:“对不起,这么简单的东西都胡乱设计,我不陪你玩儿编程了”。这样才能保证解决设计问题。
然后强烈建议他也向unitchair提出更改练习题和考试题,胡乱设计的东西不应该进教材。你想考学生练学生继承多态理解,必须得设计出一套只有这样复杂,别无他法的题目。这样才能保证学生学会。
解决方案十二:
这设计不对啊,既然要使用的是父类,为什么又会用到子类独有的属性?就好像你说你想吃个水果,又说要不削皮。给你个榴莲还不得扎死你啊。
解决方案十三:
引用8楼sp1234的回复:
具体点说,就是左边的quantity字段/属性应该是父类的,而不是子类的。如果不重构设计问题,那么你可以对给你设计左边两个class的人说:“对不起,这么简单的东西都胡乱设计,我不陪你玩儿编程了”。这样才能保证解决设计问题。
有很多滥用抽象工厂的同学写的代码就是这种风格,