set 和 get 方法

本文介绍了动态类的概念及其与密封类的区别,讨论了动态类虽然使用灵活但在内存消耗和封装性上的劣势。同时,文章详细解释了getter和setter方法的作用及实现方式,通过实例展示了如何限制私有属性的访问和修改。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

http://bbs.9ria.com/thread-88099-1-1.html

定义类有密封类和动态类,我们平常定义的都是密封类,不能动态添加属性,而动态类可以。暂时没用到过。

------------------------------------------
我们新建一个动态类:
  1. package com.mode
  2. {
  3.         public  dynaimc class PersonDy//创建动态类;
  4.         {
  5.                 public static var hand:String = "手";//定义一个静态属性;
  6.                 public var leg:String = "脚";//定义一个实例属性;

  7.                 public function PersonDy()
  8.                 {
  9.                 }
  10.         }
  11. }
复制代码
在基类里这样:
  1. package
  2. {
  3.         import com.mode.PersonDy;//导入类;
  4.        
  5.         import flash.display.Sprite;
  6.        
  7.         public class Main extends Sprite
  8.         {
  9.                 public function Main()
  10.                 {
  11.                 var person:PersonDy = new PersonDy();
  12. person.name = "小花";//PersonDy类里没有name属性,但是我们可以在这里添加;如果是密封类,则会报错;                                                trace(person.name )//输出小花;
  13. }
  14.         }
  15. }

动态类虽说使用灵活,但是消耗更多内存资源,而且破坏封装性(想想,如果别人如果在代码中也定义了一个name属性:person.name =“小白”,结果可能会很悲剧);所以建议是能使用密封类,就尽力使用密封类,动态类那是要少用;
--------------------------------
再来简单说说getter和setter方法;当一个类定义的属性是private(私有的),其他类不能访问,但是我又想访问这个属性的话,那要怎么办?
这个时候就要用到getter和setter方法了;
例子:
一个密码修改的东东,当密码修改3次,则自动锁定,不能再修改密码;
密码类:
  1. package com.mode
  2. {
  3.         public class KeyHandler
  4.         {
  5.                
  6.                 private var _count:uint;//两个私有属性;
  7.                 private var _passWord:Number = 88888888888;
  8.                
  9.                 public function KeyHandler()
  10.                 {
  11.                        
  12.                 }
  13.                                 public function set passWord(pass:Number):void{
  14.                        
  15.                         if(_count< 3){//用setter方法,还可以限制访问次数;
  16.                                 _passWord = pass;
  17.                                 trace("密码设置成功,密码:" + _passWord);
  18.                                 _count ++;
  19.                         }else{
  20.                                 trace("密码修改次数超过3次,已锁定!");
  21.                         }
  22.                 }
  23.                
  24.                 public function get passWord():Number{
  25.                 return _passWord;
  26.                 }
  27.                
  28.                
  29.                
  30.                
复制代码
Main类:
  1. package
  2. {
  3.         import com.mode.KeyHandler;
  4.        
  5.         import flash.display.Sprite;
  6.                
  7.                 public class Main extends Sprite
  8.         {
  9.                 public function Main()
  10.                 {
  11. var key:KeyHandler = new KeyHandler();
  12. key.passWord = 11111111111111;//注意哦,访问不是key.passWord(),而是key.passWord;
  13. key.passWord = 22222222222;
  14. key.passWord = 9999999999;
  15. key.passWord = 4444444444;
  16. key.passWord = 66666666666;
  17. }
  18. }
  19. }
复制代码
输出
密码设置成功,密码:11111111111111
密码设置成功,密码:22222222222
密码设置成功,密码:9999999999
密码修改次数超过3次,已锁定!
密码修改次数超过3次,已锁定!

getter和setter一个写入,一个读出;
setter有且只有一个参数,并无返回值,

getter必须有返回值,但不能带参数;

=======================

定义passWord的set 和get 方法,调用的时候,用key.passWord 就会自动执行set 和get两个

package  
{
    /**
     * ...
     * @author wyr
     */
    public class PassWord
    {
        private var _cout:uint =1;
        private var _key:uint = 888888;
        
        public function PassWord()
        {
            
        }
        
        public function set passWord(key:uint):void {
            if (_cout <= 3) {
                _key = key;
                _cout ++ ;
                trace("密码设置成功过,新密码:" + _key);
            }else {
                trace("超过3次,以锁定!!");
            }
            
        }
        
        public function get passWord():uint {
            return _key ;
        }
        
    }

}

------------------------

package  
{
    import flash.display.Sprite;
    /**
     * ...
     * @author wyr
     */
    public class Main extends Sprite
    {
        private var keySet:PassWord = new PassWord();
        
        public function Main()
        {
            keySet.passWord = 111111;
            keySet.passWord = 222222;
            keySet.passWord = 333333;
            keySet.passWord = 444444;
        }
        
    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值