11RIA 闪客社区 - 最赞 Animate Flash 论坛

搜索
查看: 2179|回复: 9
上一主题 下一主题

[悬赏 ≤ 99 银子] 求大神教我:有关继承,复合,方法重载的练习疑难解答!!很好挣的65银子!!

[复制链接] TA的其它主题
发表于 2018-12-20 22:47:09 | 显示全部楼层 |阅读模式
65银子
我是一个菜鸟,最近在学习as3复合与继承,想设计一个小练习,怎么也不能达到我想要的结果,修改了无数次!
下图是我画的一个框架图,希望你能看明白!


IMG_20181220_222734.jpg
 楼主| 发表于 2018-12-20 22:58:42 | 显示全部楼层
遇到的难题如下:
1,复合的几个子类属性都是internal,在文档类里无法访问,
2,复合类的方法重载返回类型是父类,但返回子类1时,添加的属性丢失。
3,调用用类2的方法时,编译老是出错!
这三条是主要问题,希望大神能帮我写一个实例,不要太复杂,否则我看不懂!!谢谢各位了!
在练习板块中有我做的一个例子,最好能根据那个例子修改!!!谢谢您了!!
回复

使用道具 举报

发表于 2018-12-20 23:16:19 | 显示全部楼层
看不懂你的关系图~~
回复

使用道具 举报

 楼主| 发表于 2018-12-21 06:54:50 | 显示全部楼层
本帖最后由 雪原xy 于 2018-12-21 09:52 编辑
TKCB 发表于 2018-12-20 23:16
看不懂你的关系图~~

我举个例子吧:
有一个父类:笔,
它有两个子类:一个是铅笔,一个是橡皮,
然后把橡皮作为一个属性复合到铅笔里;
即,铅笔是笔的子类,但比笔多了一个橡皮的属性。
然后把笔和铅笔复合到另一个类中:盒子。
盒子里有一个方法,可以根据不同的参数,选择使用笔还是铅笔,
以上四个类在同一个包中,方法和属性共享!
最后创建一个文档类,只创建盒子类的实例

然后可以调用所有类的属性和方法!

Screenshot_2018-12-21-09-41-59-266_org.mozilla.firefox.png
回复

使用道具 举报

发表于 2018-12-21 07:37:02 | 显示全部楼层
本帖最后由 TKCB 于 2018-12-21 08:22 编辑
雪原xy 发表于 2018-12-21 06:54
我举个例子吧:
有一个父类:笔,
它有两个子类:一个是铅笔,一个是橡皮,

设计本身有问题。。
整个逻辑大概应该是这样。

有一个抽象类(或接口)笔。
有两个类实现了抽象类(或接口),也称作父类。
一个是铅笔,一个是橡皮(应该叫做修复笔)。

然后有一个文具盒类,需要铅笔或者橡皮就问文具盒要。
文具盒就会给你一个铅笔或者橡皮。
用完之后按理说扔掉即可,因为这个文具盒应该是神奇的文具盒,里面装了用不尽的铅笔和橡皮。(因为可能很多地方都同时需要铅笔和橡皮)

当然其实程序未必完全按照我的思路,每一个程序设计都是按照需求和功能要求而设计的。水平高的设计好一些,水平低的设计差一些。

再回过头来看,你这个设计需求就是文具盒里面装了各种工具,需要就从文具盒拿(文具盒采用的是复合工具的形式),这样每一个工具都有固定数量,看你复合几个对象了。
文具盒不应该只装笔,还可以装更多工具。
例如:
1. 笔是抽象类(或接口),实现类有铅笔,中性笔,油笔,钢笔,水彩笔等等。
2. 尺子是抽象类(或接口),实现类有直尺,钢尺,三角尺等等。
3. 修复工具是抽象类(或接口),实现类有橡皮,修正液,改正纸等等。

有时候会把一个功能单独抽出来,而不是作为一个父类(抽象类或接口)。
例如,尺子的测量功能,可以在任何地方使用,比如手机上面也有测量app,但是手机绝对不能划分为尺子。
也就是测量功能作为一个功能模块,可以复合在任何类中。

再说一下,其实继承,复合,抽象类,接口,变量,函数,静态成员,类对象,循环,判断等等,这些都是程序设计架构的功能和技巧或方法。
就像条条道路通罗马一样,对于公司来说实现功能就是OK的,但是好的设计需要经验和编程功力,不是用继承就好,不是用复合就好,而是合理的恰当的使用每个技巧。(这个谁也说不好,因为没有绝对)

说了一大堆,,不啰嗦了,自己体会吧。
回复

使用道具 举报

 楼主| 发表于 2018-12-21 09:41:23 | 显示全部楼层
本帖最后由 雪原xy 于 2018-12-21 09:49 编辑
TKCB 发表于 2018-12-21 07:37
设计本身有问题。。
整个逻辑大概应该是这样。

前半部分就是我的想法,后面就看不懂了,抽象类什么的实在不懂!
回复

使用道具 举报

发表于 2018-12-21 09:47:24 | 显示全部楼层
雪原xy 发表于 2018-12-21 09:41
前半部分就是我的想法,后面就看不懂了,抽象类什么的实在不懂!

慢慢学,会懂的~~
回复

使用道具 举报

 楼主| 发表于 2018-12-21 09:53:59 | 显示全部楼层
下图中的内容能实现吗?
Screenshot_2018-12-21-09-41-59-266_org.mozilla.firefox.png
回复

使用道具 举报

 楼主| 发表于 2018-12-22 18:15:09 | 显示全部楼层
本帖最后由 雪原xy 于 2018-12-22 18:37 编辑

自己做了一个练习,有大神给我点评一下吗?
[Actionscript3] 纯文本查看 复制代码
//定义一个复合类,Box:从中可以取出不同的笔;
package son{       

 public class Box        {                

var nam:String;             

   var _pencil:Pencil;                

var _rubber:Rubber;                

public var _pm:Memory;                

public var _rm:Memory;                

public function Box(na:String)            

    {                       

 nam = na;                      

  initparts();              

  }            
//一个可以重载的方法;
    public function magicpen(...mag)       

         {                      

  if (mag.length == 1)                        {                                

if (mag[0] is String)                                {                           

             write(mag[0]);                                }                                

if (mag[0] == 1)                                {                                        

rubber();                                }                        }                    


    else                        {                         

       trace("请输入正确的参数!谢谢!");                     

   }                }            

    private function initparts()                {                    

    _pencil=new Pencil();                       

 _rubber=new Rubber();                        

_pm=new Memory();                    

    _rm=new Memory();                }         

       private function write(e:String)                {                      

  _pencil.write(e);                   

     _pm.memory.push(_pencil.writein);                   

     _pm.t++;                }           

     private function rubber()           

     {                     

   if (_pm.memory.length == 1)                        {                                

trace(_pm.memory[0]);                             

   _rm.t++;                        }                        

else                        {                                

_rubber.write(_pm.memory[_pm.memory.length-1]);                                

_rm.memory.push(_rubber.writein);                             

   _pm.memory.pop();                              

  _pm.t--;                          

      _rm.t++;                        }                }        }}
//定义一个父类
Pen;package son{        class Pen        {          

      var writein:String = "什么都没有!";                

function write(e:String)                {                      

  writein = e;                }        }}
//定义一个存储类
Memorypackage son{        class Memory        {           

     public var memory:Array = ["什么都没有"];
//用来存储写入的内容;                

public var t:int = 0;//用来存储写入的次数;
        }}
//定义一个子类
Rubber;package son{        class Rubber extends Pen        {            

    override function write(e:String)                {                 

       writein = e;    

                    trace("这次擦除的是:"+e);                }        }}
//文档类
package {      

  import flash.display.Sprite;     

   import son.Box;   

     public class doc extends Sprite        {                

var _box:Box = new Box("魔盒");          

      public function doc()                {                  

      init();                }            

    function init()                {                    

    _box.magicpen(12);                  

      _box.magicpen("我");                      

  _box.magicpen("是");                   

     _box.magicpen("中");                      

  _box.magicpen("国");                        

_box.magicpen("人");                      

  _box.magicpen("?");               

         _box.magicpen(1);                   

     trace("您共写入:"+_box._pm.t+"次,内容是:"+_box._pm.memory);                  

      trace("您共擦除了:"+_box._rm.t+"次,内容是:"+_box._rm.memory);            

    }        }}

回复

使用道具 举报

 楼主| 发表于 2018-12-22 18:41:24 | 显示全部楼层
在手机里写的,复制到这里有点乱!
有耐心的大神给我看看吗?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐 上一条 /1 下一条

感谢所有支持论坛的朋友:下面展示最新的5位赞助和充值的朋友……更多赞助和充值朋友的信息,请查看:永远的感谢名单

SGlW(66139)、 anghuo(841)、 whdsyes(255)、 longxia(60904)、 囫囵吞澡(58054)

下面展示总排行榜的前3名(T1-T3)和今年排行榜的前3名的朋友(C1-C3)……更多信息,请查看:总排行榜今年排行榜

T1. fhqu1462(969)、 T2. lwlpluto(14232)、 T3. 1367926921(962)  |  C1. anghuo(147)、 C2. fdisker(27945)、 C3. 囫囵吞澡(58054)



快速回复 返回顶部 返回列表