在java中封装到底是指什么呢?
其实封装是指隐藏对象的属性和实现细节,仅对外提供公共访问方式。
好处:1将变化隔离。
2便于使用。
3提高重用性。
4提高安全性。
封装原则:1将不需要对外提供的内容都隐藏起来。
2把属性都隐藏,提供公共方法对其访问。
其实java中的函数就是最小的封装。
那么我们该怎么实现封装呢?我们举一个例子。
class Person
{
int age;
void speak( )
{
System.out.println("age="+age);
}
}
class PersonDemo
{
public static void main(String[ ] args)
{
Person p=new Person();
p.age=20;
p.speak();
}
}
这个代码是一个简单的代码,运行是可以运行的,结果如图。
但是大家有没有发现一个问题,当我们输入-20的时候运行结果肯定是-20,没问题的。但是-20与我们现实生活中的常识相违背。出现这种情况的原因是age建立对象后被直接访问到了,如果直接访问就会出现安全隐患,那么我们能不能把这个age隐藏起来不让你访问就可以了,我们可以用一个修饰符来修饰,private。
private:私有,权限修饰符,用于修饰类中的成员(成员变量,成员函数)。私有只在本类有效。
我们在int age前面加一个private试一试。
我们可以看到是运行错误的。这个说明了这个age只能在Person中访问。
那么把它私有了我们该怎么访问,我们封装提供了安全性但是应该要提供一种方法来访问。
将age私有化之后,类以外即使建立了的对象也不能直接访问了,但是人应该有年龄,那么就需要在Person类中应提供访问age的方式。
我们可以这样写这个代码。
class Person
{
private int age;
public void setAge(int a)
{
age=a;
}
void speak( )
{
System.out.println("age="+age);
}
}
class PersonDemo
{
public static void main(String[ ] args)
{
Person p=new Person();
p.setAge(20);
p.speak();
}
}
运行结果是一样的跟之前的。我们就是对外给了一种方法。对外提供了函数。之所以对外提供访问方式,就是因为可以在访问方式中加入逻辑判断等语句,对访问的数据进行操作,提高代码的健壮性。当然我们这时候输入-20他还是可以输出-20的。所以我们在里面加一个判断语句。
class Person
{
private int age;
public void setAge(int a)
{
if(a>0&&a<120)
{
age=a;
speak();
}
else
System.out.println("feifa age");
}
void speak( )
{
System.out.println("age="+age);
}
}
class PersonDemo
{
public static void main(String[ ] args)
{
Person p=new Person();
p.setAge(-20);
p.speak();
}
}
这个时候我们再运行一下。
可以看出来他判断出-20是feifa age。并且输出0。
这就是今天所说的封装和private。大家可以自己多练习去掌握。