为了数据的安全,我们不能让类和对象随便被调用,所以就有了限制访问属性的操作--------封装
封装,就是把数据和和对这些数据的操作放在一起,并且用这些操作把数据掩盖起来,是面向对象的基本概念之一,也是最核心的概念。
我们有一个非常直截了当的手段来保证在类的设计的时候做到封装:
1、所有的成员变量必须是private 的,这样就避免别人任意使用你的内部数据。
2、所有public的函数,只是用来实现这个类的对象或类自己要提供的服务的,而不是用来直接访问数据的。除非对数据的访问就是这个类及对象的服务。简单地说,给每个成员变量提供一对用于读写的get /set 函数也是不合适的设计。
private 只能用于成员变量和成员函数
表明,这个成员变量或函数是这个类私有的,
所谓私有就是,只有在这个类的内部才能够去访问它。
按照常理说,定义所有成员变量的时候,都应该是私有的,除非你有非常合理的理由,只有让成员变量是私有的,才能保护这些变量不被外界随意的使用,才能够让这些变量,按照类的设计者自己的意图去发生改变,去被使用,因为我们定义的服务都是在类的内部,外部调用的时候只是传入了参数数值,而没有对成员变量的初始值进行干扰,在一定程度上保护了类操作的安全。
例如:
class pen{
private static int a;
private static int b;
public void plus(int a){
int fen = a+b;
}
public void fan(int b){
int pen = a-b;
}
}
另一个类里面创建对象调用
pen ta = new pen(); ①
ta.plus(2); ②
ta.fan(6); ③
此时的调用对 ta 这个对象进行了的成员函数进行了赋值,
①②③
第一步运行完: ta.这个对象的成员变量进行了初始化赋值 a = 0; b = 0;
第二步运行完: 通过调用函数,传递参数, a = 2; b = 0; int fen = 2+0=2 ;
第三步:同理,a = 2, b = 6; int pen = 2-6=-4;
这里我们发现第二步,虽然我们只是传递进去了一个参数,但我们仍然调用了plus函数,运行了函数,虽然我们没有传进去对应的参数 b ,仍然用了初始化的成员变量b 参加了运算,
这说明,所谓的封装privste ,表示所私有的函数或变量只在本类中进行访问,他是在代码层面上的限制。
private
●只有这个类内部可以访问
● 类内部指类的成员函数和定义初始化
●这个限制是对类而不是对对象的
所有的不同对象之间可以互相访问别人的私有的成员
私有是针对类,而不是针对对象,意思只在一个类的内部,不在别的类,那么成员变量和成员
函数就可以相互访问,即使他是私有的。
问题:
为什么说private 是对类的而不是对对象的
(这句话到底是什么意思?private的访问属性到底限制的是什么?)
答:当成员变量被设为private 时,private 限制的是其他类使用当前类所创建的对象作为成员变量时,不可以访问此对象的类成员变量,也就是说这种情况属于跨类访问,限制类。
而当属于同一个类时,只要在类的范围内,例如成员函数中可以调用同一类所创建的对象的成员变量,这种属于相同类的不同对象,不限制对象。
综上所述,就是限制类,不限制对象。