假设基类中声明了一个protected int i数据成员变量,在集成类中可以修改这个int i,但是却不会影响到基类的i值(为什么?就不用我多说了吧,呵呵,有兴趣可以试一下),那么封装的安全性从何而说呢?因为基本上继承类的方法只能修改本地的继承而来的数据成员的副本,呵呵,好像与基类的数据成员的改变没有影响哦! 小弟面向对象学的比较衰,请指教!
随便写了一个,呵呵,比较弱: 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的麻烦事情么? 呵呵,问题比较弱,请指教。
你这样就知道了: 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();
修改i的值,是修改实例的值,不管你是通过基类类型,还是继承类类型访问都是访问的一个实例。
不明白你的指的不影响基类的i值是什么意思?
给段代码看看
这样的最大好处,如果你定义了一个相对灵活的类,就可以通过这种变量改变类的内部工作特性。当然这个工作是通过构造函数进行的。
看看关于类的构造函数文章可能对这部分应用有一定的了解。
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的麻烦事情么?
呵呵,问题比较弱,请指教。
但是tempa与tempb可是New的两个对象啊,这两个对象当然不会有关系!
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();
private是为了封装数据!
还有一点用private的好处就是可以比public的速度要快.(这点说出来应该都能理解吧)个人观点...