八、 封装

一、目标

学完本次课程后,你能够:

  • 理解封装的作用
  • 会使用封装
  • 会使用Java中的包组织类
  • 掌握访问修饰符,理解访问权限

二、为什么要使用封装

不封装会在编程过程中存在代码缺陷,变量可以接受一些非法值,并输出。

三、什么是封装

1、封装的概念

  • 将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问。

两大基本原则:

  • 把尽可能多的东西藏起来,对外提供便捷的接口

2、封装的实现

1、将属性改为private

2、创捷getter setter方法,用于属性的读写

3、在getter 和setter方法中加入属性控制语句,对属性值的合法性进行判断

3、封装的好处

  • 便于使用者正确使用系统,防止错误修改属性
  • 有助于系统之间的松耦合,提高系统独立性
  • 提高软件的可重用性
  • 降低了构建大型系统的风险

Eg1 使用封装实现企鹅类

需求说明

使用封装实现电子宠物系统的企鹅类正确输入健康值和亲密度

保证健康值的有效性(0-100),否则取默认值80

保证亲密度的有效性(0-100),否则取默认值90

  public void setHealth(int health){
        //对传递过来的health值进行判断
        if(health<0||health>100){
            System.out.println("你赋予的健康值不合理,默认赋值为80");
            this.health=80;
            return;
        }
        this.health=health;
    }

    public  void setLove(int love){
        //对传递过来的love值进行判断
        if(love<0||love>100){
            System.out.println("你赋予的亲密度值不合理,默认赋值为90");
            this.love = 90;
            return;
        }
        this.love=love;
    }

四、包

1、为什么需要包

  • 文档分门别类,易于查找和管理
  • 使用目录解决文件同名冲突问题

2、包的作用

  • 允许类组成较小的单元(类似 文件夹),易于找到和使用相 应的文件
  • 防止命名冲突 区分名字相同的类
  • 有助于实施访问权限控制

3、包的创建

作为Java源代码的第一条语句

用package声明包,以分号结尾

//

package com.bdqn.demo02;

4、包命名的规范

包名由小写字母组成,不能以圆点开头或结尾

包名之前最好加上唯一的前缀,通常使用组织倒置的网络域名

包名后续部分依不同机构内部的规范不同而不同 

5、如何导入包

为了使用不在同一包中的类,需要在Java程序中使用import关键字导入这个类

//     import   包名. 类名;

  • . 系统包:java.util 2.
  • 自定义包:cn.jtest.classandobject
  • *: 指包中的所有类
  • School :指包中的School类

6、包的注意事项

一个类同时引用了两个来自不同包的同名类

  • 必须通过完整类名来区分

每个包都是独立的,顶层包不会包含子包的类

  • package和import的顺序是固定的 package必须位于第一行(忽略注释行)
  • 只允许有一个package语句
  • 其次是import,可以有多条语句
  • 接着是类的声明

五、类的访问修饰

1、类的访问修饰符

public修饰符:公有访问级别

默认修饰符:包级私有访问级别

2、类成员的访问修饰符

  • public: Java语言中访问限制最宽的修饰符,一般称之为“公共的”。被其修饰的类、属性以及方法不仅可以跨类访问,而且允许跨包(package)访问。
  • private: Java语言中对访问权限限制的最窄的修饰符,一般称之为“私有的”。被其修饰的类、属性以及方法只能被该类的对象访问,其子类不能访问,更不能允许跨包访问。
  • protect: 介于public 和 private 之间的一种访问修饰符,一般称之为“保护形”。被其修饰的类、属性以及方法只能被类本身的方法及子类访问,即使子类在不同的包中也可以访问。
  • default:即不加任何访问修饰符,通常称为“默认访问模式“。该模式下,只允许在同一个包中进行访问。

3、Static修饰符

  • 成员变量 静态变量,可以直接通过类名访问
  • 成员方法 静态方法,可以直接通过类名访问
  • 代码块 静态代码块,当Java虚拟机加载类时,就会执行该代码块

(1)类的成员变量

类变量(静态变量)

  • 被static修饰的变量 在内存中只有一个拷贝
  • 类内部,可在任何方法内直接访问静态变量
  • 其他类中,可以直接通过类名访问

实例变量

  • 没有被static修饰的变量
  • 每创建一个实例,就会为实例变量分配一次内存,实例变量可以在内存中有多个拷贝,互不影响

(2)static方法

静态方法:可直接通过类名访问

  • 静态方法中不能使用this和super
  • 不能直接访问所属类的实例变量和实例方法
  • 可直接访问类的静态变量和静态方法

实例方法:通过实例访问

  • 可直接访问所属类的静态变量、静态方法、实例变量和实例方法
  • 静态方法必须被实现  main()就是最常用的静态方法

(3)为什么静态的访问不到非静态的底层逻辑

  • 静态方法中 只能访问静态方法 静态变量
  • 非静态是对象创建之后才会产生
  • 而静态方法随着类的存在就会存在
  • 这也是为什么静态方法必须被实现的原因

六、总结

  • 实现封装的步骤是什么?
  • 常用的访问权限控制符有哪些?

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值