假设基类中声明了一个protected int i数据成员变量,在集成类中可以修改这个int i,但是却不会影响到基类的i值(为什么?就不用我多说了吧,呵呵,有兴趣可以试一下),那么封装的安全性从何而说呢?因为基本上继承类的方法只能修改本地的继承而来的数据成员的副本,呵呵,好像与基类的数据成员的改变没有影响哦!
小弟面向对象学的比较衰,请指教!

解决方案 »

  1.   

    ===>在集成类中可以修改这个int i,但是却不会影响到基类的i值
    修改i的值,是修改实例的值,不管你是通过基类类型,还是继承类类型访问都是访问的一个实例。
    不明白你的指的不影响基类的i值是什么意思?
    给段代码看看
      

  2.   

    private声明后只能在本类中进行应用。
    这样的最大好处,如果你定义了一个相对灵活的类,就可以通过这种变量改变类的内部工作特性。当然这个工作是通过构造函数进行的。
    看看关于类的构造函数文章可能对这部分应用有一定的了解。
      

  3.   

    private 是语义问题,和数据的实际结构无关,不把成员变量定义为public 是面向对象设计的一个准则,将数据和操作分离,也就是 functional abstraction,mfc 不能算是面向对象设计的典范吧,呵呵, NETFUNNER似乎应该把类和对象的描述的准确一些吧,不是很明白讲什么
      

  4.   

    数据的封装,如果是public 的,调用者都可以更改,pivate的调用者不可以访问,可定义一个属性来访问private的变量,只给一个get方法,就是只读的,只有set 方法则是只写的,这样封装不是很好吗?面向对象的设计是不提倡用public 的变量的
      

  5.   

    随便写了一个,呵呵,比较弱:
    class a
    {
    protected int i;
    public void show()
    {
    Console.WriteLine(i.ToString ());
    }
    };
    class b:a
    {
    public void show()
    {
    i++;
    Console.WriteLine(i.ToString());
    }
    };
    main中声明:
    a tempa=new a();
    b tempb=new b();
    tempb.show();
    tempa.show();
    呵呵,可以发现基类实例中i并没有得到改变,那么请问,按照面向对象的说法,为什么一定要把i定义为private?定义成为protected不是更好,不也解决了,在继承类中也要定一个i的麻烦事情么?
    呵呵,问题比较弱,请指教。
      

  6.   

    如果我们自己开发了一个控件(或是其它),在控件的实现中用到了很多如计算位置等方法,也用到了很多保留有用信息的变量,但这些变量与方法,对与这个控件的使用都来说都没有用,只是在控件内部进行使用,那么如果把这些变量设置成public或是protected,不是很麻烦,拜托。
      

  7.   

    当然不会改变啊,a和b是对应的。
    但是tempa与tempb可是New的两个对象啊,这两个对象当然不会有关系!
      

  8.   

    你这样就知道了:
    class a
    {
    protected int i;
    public void show()
    {
    Console.WriteLine(i.ToString ());
    }
    };
    class b:a
    {
    public void show()
    {
    i++;
    Console.WriteLine(i.ToString());
    }
    };
    main中声明:
                               //多态
    a tempa=new b();
    b tempb=(b)a;
    tempb.show();
    tempa.show();
      

  9.   

    a,b是两个不同的对象,当然不变了!
    private是为了封装数据!
      

  10.   

    NETFUNNER 还没区分好类和对象的关系,呵呵!一个变量定义为public ,就意味暴露了该class 的一个属性可供读写,但这样的暴露非常没有弹性,比如某个图形类希望能够暴露出width的属性,当然可以暴露一个Width的 double的变量,但是一端时间后,可能会发现width 计算出来可能更好...这只是一个方面的问题。其他还有很多理由,楼上的都说乐不少。嘻嘻!
      

  11.   

    LYH1977() 说的很对啊.变量封装成private.要修改或读取就通过写一个set_xxx()或get_xxx(),的方法来进行.
    还有一点用private的好处就是可以比public的速度要快.(这点说出来应该都能理解吧)个人观点...
      

  12.   

    private的好处就是可以比public的速度要快? 不可能!