最近学习进度有点小慢,拖了好几天了,今天小学了一波,学习了封装性,因为之前自学过一段时间的C++,封装性的内容还是大差不差的,其封装性主要是通过权限修饰符进行限制一些结构的适用范围,从而达到能更好的与用户进行交互以及功能的实现,下面是跟着敲的 一些代码,代码较为简单 ,主要是体会其中的结构。
package OOPCharacter;
/*
* 封装性(封装与隐藏)
*
* 一、问题的引入
* 当创建一个类的属性时,可通过 对象.属性 赋值,受数据类型和存储空间限制
* 若想对属性进行进一步限制,需要通过方法进行限制如下setLegs()
* 为了避免使用对象.属性赋值,将此属性设置权限为私有(private)
* 此时针对于属性,就体现了封装性
*
* 二、封装性的体现
* 属性私有化(private),并利用公共的方法(public)获取和设置属性
* 封装性的体现:①属性私有化
* ②不对外暴露的私有的方法
* ③单例模式
* 三、封装性的体现需要权限修饰符体现
* 1.java 规定的四种权限修饰符(由小到大)
* private:同一个类内可用
* 缺省(default):同一个类,同一个包内可用
* protected:同一个类,同一个包,不同包的子类(继承)可用
* public:同一个类,同一个包、不同包的子类、同一个工程 可用
* 2.可用来修饰属性、方法、内部类、构造器
* 修饰类只能用 缺省和public,修饰内部类可以用四种权限
*
* java提供四种权限修饰符修饰类和类的内部结构,体现结构可见性的大小
*
*/
public class AnimalTest
{
public static void main(String[] args) {
Animal dog=new Animal();
dog.name="大黄";
//dog.age=1;//The field Animal.age is not visible
dog.legs=4;
dog.show();
dog.setAge(-1);
System.out.println(dog.getAge());
}
}
class Animal
{
String name;
private int age;
int legs;
public void eat()
{
System.out.println("动物进食");
}
public void show()
{
System.out.println("name="+name+",age="+age+",legs="+legs);
}
//设置年龄属性
public void setAge(int l)
{
if(l>0)
{
age=l;
}
else
{
System.out.println("输入年龄有误,请重新输入");
}
}
//获取年龄属性
public int getAge()
{
return age;
}
}
package OOPCharacter;
public class OderTest
{
public static void main(String[] args)
{
Order1 test=new Order1();
test.orderDefault();
test.orderPublic();
//除了Order类,private结构不能再使用
//test.orderPrivate();//The method orderPrivate() from the type Order1 is not visible
test.orderDefault=1;
test.orderPublic=2;
//test.orderPrivate=3;//The field Order1.orderPrivate is not visible
}
}
package OOPCharacter;
public class Order1 {
public int orderPublic;
int orderDefault;
private int orderPrivate;
public void orderPublic()
{
orderPublic=1;
orderDefault=2;
orderPrivate=3;
}
void orderDefault()
{
orderPublic=1;
orderDefault=2;
orderPrivate=3;
}
private void orderPrivate()
{
orderPublic=1;
orderDefault=2;
orderPrivate=3;
}
}
一般对对象的属性赋值和获取时,不直接利用对象.属性进行访问,因为这些属性的赋值可能存在限制条件,如人的年龄不能有负数之类的。所以要将对象的属性私有化,然后在类中构造新的方法去设置和获取对象的属性 。如下面的小例子:
package OOPexer;
public class Encapsulation_Example
{
public static void main(String[] args) {
person p=new person();
p.setAge(120);
System.out.println(p.getAge());
//p.age=1;//The field person.age is not visible
//只能利用方法设置和访问属性
}
}
class person
{
private int age;
public void setAge(int eage)
{
if(eage>=0&&eage<=130)
{
age=eage;
}
else
{
System.out.println("年龄输入有误,请重新输入");
}
}
public int getAge()
{
return age;
}
}