关于 带 抽象父类参, 却调用子类变量, 如何实现,内有图,求解!

问题描述

如图 求解

解决方案

解决方案二:
无法改例题,如何打代码才能读取到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的人说:“对不起,这么简单的东西都胡乱设计,我不陪你玩儿编程了”。这样才能保证解决设计问题。

有很多滥用抽象工厂的同学写的代码就是这种风格,

时间: 2024-11-01 18:31:49

关于 带 抽象父类参, 却调用子类变量, 如何实现,内有图,求解!的相关文章

谢谢-如果父类中有有参构造方法,子类不主动继承会怎么样

问题描述 如果父类中有有参构造方法,子类不主动继承会怎么样 在java中,如果父类中有有参构造方法,子类不主动继承会怎么样. 解决方案 写段代码试试不就知道了? 会编译失败. 解决方案二: 没事啊,由于子类的构造方法里需要调用父类的构造方法,所以如果父类只有有参构造函数则需要显示调用 解决方案三: 如果不调用,有可能一些对象为空,一些数据没有加载等问题,你访问出错 解决方案四: 子类只要继承了父类,子类就可以使用父类的方法,你所说的那个主动继承应该是指重载吧. 假如不重载的话,也可以正常调用那个

PHP父类调用子类方法的代码例子

 这篇文章主要介绍了PHP父类调用子类方法的代码例子,需要的朋友可以参考下 今天突然发现需要在父类中调用子类的方法,之前一直都没这么用过,通过实践发现也可以.例子如:  代码如下: <?php /**  * 父类调用子类方法 基类  * @author LNMP100  *  */ class BaseApp {     /**      * 调用子类方法      * @version  创建时间:2013-07-10      */     function _run_action()  

javaee-java为什么父类没有有参构造,子类可以通过有参构造来访问父类的变量

问题描述 java为什么父类没有有参构造,子类可以通过有参构造来访问父类的变量 java为什么父类没有有参构造,子类可以通过有参构造来访问父类的变量 解决方案 首先,继承体系中父类的私有变量,子类是不能访问的,子类只能访问父类的protectedpublic修饰的成员变量: 其次,父类的成员变量如果提供了getter/setter方法,子类才能通过这些方法来访问父类的成员变量的. 至于你说的问题,构造函数的作用只是创建实例时初始化成员变量的,在构造函数中成员变量都是初始默认值,"子类可以通过有参

java中当父类变量值改变后,子类在通过super调用该变量时,该值是否还是初始化的值?

问题描述 java中当父类变量值改变后,子类在通过super调用该变量时,该值是否还是初始化的值? class A{ int x=2; public void setX(int i){ x=i; } public void printa(){ System.out.println(x); } } class B extends A{ int x=100; void printb(){ //super.x=super.x+10; System.out.println("super.x:"

PHP父类调用子类方法的代码例子_php实例

今天突然发现需要在父类中调用子类的方法,之前一直都没这么用过,通过实践发现也可以.例子如: 复制代码 代码如下: <?php/** * 父类调用子类方法 基类 * @author LNMP100 * */class BaseApp{    /**     * 调用子类方法     * @version  创建时间:2013-07-10     */    function _run_action()    {            $action = "index";      

PHP父类调用子类方法实例

今天突然发现需要在父类中调用子类的方法,之前一直都没这么用过,通过实践发现也可以.例子如下:  代码如下 复制代码 <?php /**  * 父类调用子类方法 基类  * @author LNMP100  *  */ class BaseApp {     /**      * 调用子类方法      * @version  创建时间:2013-07-10      */     function _run_action()         {             $action = "

java-抽象类 子类实现相同方法 想想去执行抽象类中的方法,在从抽象类中调用子类具体方法

问题描述 java-抽象类 子类实现相同方法 想想去执行抽象类中的方法,在从抽象类中调用子类具体方法 如下代码,想得到这样结果execute AA before execute..C execute AA after 应该怎么处理 public class Test { public static void main(String[] args) { C c = new C(); c.A(); } } interface YY { public void A(); } abstract clas

重名-C++ using 父类成员函数与子类类名相同怎么办

问题描述 C++ using 父类成员函数与子类类名相同怎么办 最近在研究using的使用,除了能够引入某些作用域中的变量和函数外,另一个用途是子类修改父类成员函数的访问权限先看代码吧: #include<iostream>using namespace std;class Base{public: Base() { cout<<""Base Constructor!""<<endl; } void func(int n = 1)

python使用multiprocessing模块实现带回调函数的异步调用方法_python

本文实例讲述了python使用multiprocessing模块实现带回调函数的异步调用方法.分享给大家供大家参考.具体分析如下: multipressing模块是python 2.6版本加入的,通过这个模块可以轻松实现异步调用 from multiprocessing import Pool def f(x): return x*x if __name__ == '__main__': pool = Pool(processes=1) # Start a worker processes. r