Java面向对象的三大特性之--《封装》

封装概念

  • 将东西包装在一起,然后以新的完整的形式呈现出来。
    • 将方法和属性包装在一个单元中,单元一类的形式呈现
  • 信息隐藏,隐藏对象实现的细节,不让外部直接访问到。
  • 将数据和方法包装进类中,加上具体实现的隐藏,共同被称作封装,其结果是一个同时带有特征和行为的数据类型。
  • “定义类,定义其属性、方法的过程,称为封装类。”

信息隐藏是OOP最重要的功能之一,也是使用访问修饰符的原因

  • 信息隐藏的原因包括:

    • 对模块的任何实现细节的修改不会影响使用该模块的代码。
    • 防止用户意外修改数据
    • 模块易于使用和维护
  • 访问修饰符:

    • private —–>只有该类可以访问
    • protected ——>该类、其子类、同一个包中的类可以访问
    • public —->该类、非该类均可访问
    • 默认 —-> 同一个包中的类可访问

属性封装的实现

  • 修改属性的可见性来限制对属性的访问
  • 为每个属性创建一对赋值(setter)和取值(getter)方法,由于公开这些对属性的访问接口
  • 在setter 和 getter 方法中根据需要加入对属性操作的限制。
//除非必须公开底层实现细节,否则应将所有属性指定为private加以封装
//使用属性封装通过增加数据的访问限制,增强了类的可维护性
public class Student {
    private String name;
    private int age;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        if(age<22){
            System.out.println("错误,最小年龄为22");
            this.age = 22;
        }else{
            this.age = age;
        }
    }

}

封装方法的目的

  • 隐藏方法实现细节(方法体),想外部提供公开接口(方法头),以供安全调用
  • 简化调用,方便修改维护
  • 根据需要,可以私有化方法以供内部使用—帮助方法helper

构造方法

  • 类的构造方法的概念和作用
    • 负责对象初始化工作,为对象属性赋合适的初始值
    • 创建对象时,其类的构造方法确保:在用户和操作对象之前,系统保证初始化的运行
  • 构造方法的语法规则
    • 构造方法名与类名相同
    • 没有返回类型
    • 方法实现主要为属性赋初值
  • 构造方法的调用
    • new 操作符(返回新建实例的引用)
    • 强调:java系统保证每个类都有构造方法

this关键字

  • this关键字的特点

    • 在类的方法中使用this关键字代表的是调用此方法的对象的引用
    • this 可以看作成是一个变量,它的值是当前对象的引用
    • 使用this可以处理方法中成员变量和形参同名的问题
    • 当方法内需要用到调用该方法的对象时,就可以用this
    • 在类的构造方法中,可以调用this(参数列表)来调用该类指定的构造方法
      例如:

          public class Test{
                  public Test(){
                      this("a","b");
                  }
                  public Test(String s,String s2){
                      System.out.println(s+s2);
                  }
                  public static void main(String args[]){
                      new Test();
                  }
          }

static关键字

  • static 关键字的特点
    • 用来修饰类的成员—修饰成员变量的称之为类变量(静态变量) ,修饰为成员方法的称之为类方法 (静态方法)
    • 当类被加载的时候就会被加载,优先于对象的存在。
    • 用来修饰语句块称之为静态代码块,先于构造方法之前执行,只会执行一次, 用来对静态成员做初始化。
    • 静态修饰的成员被所有对象共享。
    • 调用时直接用”类名.成员”来进行访问。
  • static关键字的注意事项
    • 静态方法只能访问外部的静态成员
    • 静态方法中不能出现this关键字

static运用

  • 实例-单例模式定义
    • 顾名思义:单例模式的意思就是一个实例,确保其一个类只有一个实例,而且自行实例化向整个系统提供这个实例,这个类称为单例类。
    • 单例模式要点
      • 某个类只能有一个实例
      • 他必须自行创建这个实例
      • 它必须向整个系统提供这个实例

方法重载(overload)的概念

  • java中,规定放方法签名是解析方法规则,而不是方法名,为方法重载创造条件
  • 方法重载使得在一个类中,方法名相同而参数列表不同的方法,可同时存在,代表相似行为或功能
  • 概念:同一个类中,同名不同参的方法称为重载方法
  • 注意:仅有返回值类型不同的方法不能称为重载,即方法重载必须方法签名不同

方法重载的意义

  • 方法重载并不陌生
    • java.io.printStream 类的println方法能够打印数据,根据数据类型不同,有不同的实现方式
      这里写图片描述
  • 构造方法重载是方法重载的典型示例
public class Teacher{
    private String name;
    private String age;
    public Teacher(String name){
        this.name = name;
    }
    public Teacher(String name,String age){
        this.name = name;
        this.age = age;
    }
}

  • 打包的意义
    • 标准java库是一系列包组成,包括java.lang,java.util,java.net等等。标准java包就是层次包型结构,就如同电脑硬盘上的目录一样,我们可以使用嵌套层次结构来组织包。
    • java包是为了更好的规范代码,防止命名冲突和混乱。所以java出现了打包机制。
    • 包访问权限把类聚集在同一个包中这一种做法提供意义和理由
  • package 声明包

例如:

package student.a;
public class Student{
    private String name;
    private String age;
    /**
    * 包访问权限
    * @return 自我介绍内容
    * */

    String introduction(){
        return name+ "," +age;
    }
}

//  1. 包名由小写字母组成
//  2. java程序员都可以编写自己的java包,为了保证每个java包命名的一性,编程规范要求程序员在自己定义的包名之前加上唯一的前缀
//  3. 由于互联网上的域名是不会重复的,所以一般推荐采用公司在互联网上的域名的倒置作为包的唯一前缀。
  • 一个类可以使用同一个包中所有类,其它包中的所有公开类
  • 访问其它包的两种方式
    1. 在简单的类名前面加完整包名:
      例如:java.util.Date date = new java.util.Date();
    2. 使用import 语句来导包
      例如:import java.util.Date;
      ... Date today = new Date();
  • 可以import 特定类,也可以导入整个包。通过在java源文件的顶部(打包语句后) 使用import导入语句来实现
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值