面向对象-封装:
封装:是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。
例如:电脑机箱,内部设备封装在机箱内部。
封装的好处:
1. 将变化隔离
2. 便于使用
3. 提高重用性
4. 提高安全性
封装的原则:
将不需要对外提供的内容都隐藏起来。
把属性都隐藏,提供公共方法对其访问。
class Person
{
privateInt age; //private:私有,权限修饰符:用于修饰类中的成员(成员变量,成员函数)。私有只在本类中有效。
私有仅仅是封装的一种表现形式。
publicvoid setAge(int a)
{
age=a;
}
public intgetAge()
{
return age;
}
//Int age; //可以直接访问
voidspeak()
{
System.out.println(age);
}
}
Class Persondemo{
Publicstatic void main(String []args){
Personp = new Person();
//p.age=20; //直接访问了,可能会有安全隐患-20
p.setAge(20); //调用setAge方法
p.speak();
}
}
之所以对外提供访问方式,就是因为可以在访问方式中加入逻辑判断等语句,对访问的数据进行操作,提高代码健壮性。
构造函数:
特点:
1. 函数名与类名相同
2. 不用定义返回值类型
3. 不可以写return语句
作用:
对象一建立就会调用与之对应的构造函数,给对象进行初始化。
小细节:
当一个类中没有定义构造函数时,那么系统会默认给该类加入一个空参数的构造函数。
当在类中自定义了构造函数时,默认的构造函数就没有了。
当分析事物时,该事物已存在就具备一些特性或行为,那么就将这些内容定义到构造函数中。
class Person
{
privateString name;
privateint age;
/*构造代码块
作用:给对象进行初始化。
对象一建立就运行,而且优先于构造函数执行。
和构造函数的区别:
构造代码块是给所有对象进行统一初始化,
而构造函数是给对应的对象初始化。*/
{
System.out.pritnln(“构造代码块”);
}
Person()
{
System.out.println(“构造函数”);
}
Person(Stringname)
{
this.name=name;
}
Person(Stringname,int age)
{
this(name); //this语句
this.age=age;
}
}
this:代表了本类对象。代表它所在函数所属对象的引用,那个对象在调用this所在的函数,this就代表那个对象。
当定义类中功能时,该函数内部要用到调用该函数的对象时,用this表示这个对象。
this语句只能定义在构造函数的第一行,用于构造函数之间的调用.