Java三兄弟之封装

封装是面向对象的三大特性之一,它通过private关键字实现数据隐藏,提供get/set方法作为访问接口,以增强代码安全性和可维护性。构造器用于对象初始化,允许在创建对象时传入参数,this关键字则帮助区分局部变量和成员变量。
摘要由CSDN通过智能技术生成

面向对象有三大特征:封装、继承、多态。

封装

何为封装呢?

顾名思义,就是把一堆的东西封起来装到一个东西里面。

封装的优点

为什么要封装呢?

打比如我们的电脑,你觉得我们的电脑零件是暴露在外面好呢,还是装到一个盒子里面好呢。那当然是装到里面好,这样可以避免不必要的损坏。
那我们的程序当然也是封装到一个地方更好。这样更能够避免里面的属性或者方法被频繁的修改。

封装可以被认为是一个保护屏障,防止该类的代码和数据被其他类随意访问。适当的封装可以让代码更容易理解与维护,也加强了代码的安全性。

简而言之,言而简之:封装可以体现出:

  • 高内聚:类的内部数据操作细节自己完成,不允许外部干涉。
  • 低耦合:仅对外暴露少量的方法和属性用于使用

封装

封装的意义:
  • 让使用者只能通过事先预定的方法来访问数据,从而可以在该方法里面加入控制逻辑,限制对成员变量的不合理访问。还可以进行数据检查,从而有利于保证对象信息的完整性。
  • 便于修改,提高代码的可维护性。主要说的是隐藏的部分,在内部修改了,如果其对外可以的访问方式不变的话,外部根本感觉不到它的修改。例如:Java8->Java9,String从char[]转为byte[]内部实现,而对外的方法不变,我们使用者根本感觉不到它内部的修改。
private关键字

关键字private,表示私有的。用它修饰的成员(属性或方法)都不能直接在外界访问,只能够在本类中进行访问。

语法格式:

private 变量类型 变量名;

private 方法返回值 方法名(){
} 
封装的步骤

想要封装必须防止类的属性或方法被外界直接访问,又根据需要提供一个可以让外界访问的通道。

步骤:

  • 变量或者方法的私有化,使用private修饰
  • 使用(get、set)方法,给外界一个可以访问的通道

例如:

//属性
private int a;

//方法
public void setA(int a) {
    age = a;
}

public int getA() {
    return age;
}

提示:当变量比较多的时候,写get/set方法难免比较多,这时可以使用IDEA的话可以使用快捷键Alt+Insert找到getAndset进行创建

this关键字

this解决局部变量与成员变量同名问题

当局部变量与实例变量(非静态成员变量)同名时,在实例变量前面加“this.

this代表当前对象的引用,即当前被创建的对象

构造器(Constructor)

方法在调用的时候可以往里面传递参数,那么创建一个类的时候可不可以也往里面进行传参呢?
答案是 :当然可以了

我们可以在类中添加一个构造器,new一个对象就相当于在调用new这个类的构造方法。往构造方法里面进行参数的声明,就相当于需要在new对象时传递0个或多个属性的值。

6.6.1 构造器的作用

new对象,并在new对象的时候为实例变量赋值。

6.6.2 构造器的语法格式

语法格式:

【修饰符】 class 类名{
    【修饰符】 构造器名(){
    	// 实例初始化代码
    }
    【修饰符】 构造器名(参数列表){
        // 实例初始化代码
    }
}

格式说明:

构造器又称为构造方法,那是因为它长的很像方法。但是和方法还是有所区别的。

  • 构造器名必须与它所在的类名必须相同。
  • 它没有返回值,所以不需要返回值类型,甚至不需要void
  • 构造器的修饰符只能是权限修饰符,不能被其他任何修饰

示例代码:

package com.atguigu.constructor;

public class Student {
    private String name;
    private int age;

    // 无参构造
    public Student() {}

    // 有参构造
    public Student(String name,int age) {
        this.name = name;
        this.age = age;
    }
}

6.6.3 构造器使用注意事项

  1. 如果你不提供构造器,系统会给出隐藏的无参数构造器,并且该构造器的修饰符默认与类的修饰符相同
  2. 如果你提供了构造器,系统将不再提供无参数构造器,除非你自己再显示定义。
  3. 构造器是可以重载的,既可以定义参数,也可以不定义参数。
package com.atguigu.constructor;

public class TestStudent {
    public static void main(String[] args) {
        //调用无参构造创建学生对象
        Student s1 = new Student();

        //调用有参构造创建学生对象
        Student s2 = new Student("张三",23);
    }
}

6.6.4 this调用本类其他构造器

同一个类中,使用this(【实参列表】)可以实现构造器之间的相互调用。

  • this():调用本类的无参构造

  • this(实参列表):调用本类的有参构造

  • this(【实参列表】)只能出现在构造器内首行

    注意:不能出现构造器递归调用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

黑妖问路

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

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

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

打赏作者

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

抵扣说明:

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

余额充值