JAVA(十七)面向对象的三大特征之一封装

面向对象程序三大特性:封装、继承、多态。而类和对象阶段,主要研究的就是封装。封装简单来说就是套壳屏蔽细节。举个例子,手机中都有主板,而产家不会直接将一个主板直接卖给用户,而会对手机进行外壳的包装,将内部实现细节隐藏起来,仅仅对外提供开关机、按键以及插孔等,让用户和手机屏幕、按键交互,实际上手机真正工作的是CPU、内存等元件。

c4ae68f3e0384c8fb4675214cf21721d.png

 7b1c7d6eec084538aadb00e864efcb48.png

92738a2949ba4d0bb5c201fb66748289.png

封装:将数据和操作数据的方法进行有机结合,隐藏对象的属性和实现细节,仅对外公开接口来和对象进行交互。Java的封装指的是在一个类中将数据和方法进行封装,使其可以保护起来,只能在该类内部访问,而不允许外部直接访问和修改

封装是把过程和数据包装起来,对数据的访问只能通过已定义的接口

  1. 对数据(属性)的封装使用private
  2. 对过程(行为)的封装使用,给出访问权限为public的setter(给数据赋值,不需要返回值)方法和getter(获得赋值后的数据,需要返回值)方法

封装的实现

1c2daa4ac96d45b1b121b670c3c46727.png

 1.1方法封装

举个例子:对于一个Man这个类来说,name、age、wife都是私有属性,对于属性的封装使用“private”

public class Man {
 
 
    private String name;
    private int age;
    private String wife;
 
}

那么对于这些属性来说,使用private封装属性的目的就是保护数据,不让人随意破坏,强制只能在本类中使用
如果在其他类中想要通过其他类的对象来调用Man这个类的私有属性,就很不方便,因为设置成了private私有属性
所以会在定义好private之后,在下面再进行public访问的权限的赋值setter和获取getter两种方法的封装
再比如
在学生类中amount是public 的,此时我们new 一个对象,通过.amount是可以访问的,没有实现封装,外部可以对他访问
 

19503131975447c28b64e6fc150822fd.png

针对以上例子

封装实现的第一步,修改属性的可见性。

将amount 的public 改为private ,改为private以后我们就不能st.amount了

创建一对对外赋值取值的方法 idea中右键get set,通过get 方法就可以取到amount的值了。

在这我们也可声明一个方法来取值,不一定是get方法

第三步new ,调用get方法

访问控制修饰符中public是权限最大的,private是权限最小的

 1.2行为(方法)封装

Man这个类对外界的类提供方法的封装,通过这些封装方法的调用,可以对Man这个类中的属性进行赋值set和获取get,设定姓名、年龄等,也可以获得姓名、年龄。
 

public class Man {
 
 
    //属性封装
    private String name;
    private int age;
    private String wife;
 
 
    //行为封装
 
    //其他类对私有属性name进行赋值,调用这个方法
   public void setName(String name){
       //this.name的name指得是类成员变量private String name;中的name
       // = name,即等号右边的name指的是(String name)中的形参name
       this.name = name;
   }
 
   //其他类获取私有属性name的值时,调用这个方法
   public String getName(){
       //这里的name指的就是上面private name
       return name;
 
   }
 
   //其他类对私有属性age进行赋值,调用这个方法
   public void setAge(int age){
 
       //this.age中的age指的是类成员变量private age,中的age\
       // = age,即等号右边的age指的是(int age)中的形参age
       this.age = age;
   }
 
 
}

封装的优点如下:

  • 提高类的安全性:封装可以避免外部程序直接访问和修改类的内部数据,从而保证类的数据安全性和保密性。但是,需要注意的是,封装并不是万能的,有些攻击手段仍然可以突破封装的保护措施,因此需要综合使用多种安全技术来保护类的数据安全。
  • 提高代码的可读性:封装可以隐藏对象的实现细节,使得使用者只需要关心类的接口,而不需要知道类的实现细节。这样可以提高代码的可读性和可维护性。另外,封装还可以使代码更易于理解,因为使用者只需要关注类的公共方法,而不需要了解类的所有细节。
  • 提高代码的复用性:封装可以将类的接口和实现分离,使得类的实现可以独立于接口而变化。这样可以提高代码的复用性和可扩展性。例如,如果需要更改类的

 1.2 访问限定符

Java 中主要通过类和访问权限来实现封装:类可以将数据以及封装数据的方法结合在一起,更符合人类对事物的认知,而访问权限用来控制方法或者字段能否直接在类外使用。Java 中提供了四种访问限定符:

25660f0a6a8e42138fa561d4733b7175.png

使用public修饰的成员属性和方法可以被当前项目中所有包的所有类访问,拥有最大权限。

访问权限是private的变量,只能在本类中使用,不能在本类同一个包中的其他类使用。

 

这四种访问限定符中 public 可以理解为公共电话,谁都可以用;default 可以理解为家门口的密码,家里人 (同一个包中) 知道,别人不能知道;private 是只有自己可以用,其他人都不可以用; protected 主要是用在继承中,子类继承父类后,利用 super() 来访问。

注:成员变量没有访问限定符修饰的话,默认为 default 。

练习:定义一个Bank类,包含name,price两个属性,声明一个方法访问price 这个属性,不允许使用对象名.的形式来直接访问修改price这个属性。并生成get set方法

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

薛定谔的猫1981

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值