【JavaSE】知识点总结:封装

目录

一、封装

1. private关键字实现属性的封装

2. getter与setter

2.1 封装体现出来的保护性:

2.2 封装体现出来的易用性:

3. 关于封装的总结:


面向对象开发的三大特性:封装,继承,多态

一、封装

封装 : 可见范围的问题,体现的就是易用性与保护性。

1. private关键字实现属性的封装

看见private关键字:只在当前类的内部可见,出了类的{ },对外部完全隐藏。

public关键字:被public修饰的内容,在当前项目中都可见,描述公共的,公开的内容

public和private都称为访问修饰符,描述属性或方法的可见性

在我们现实生活中,将汽车比作一个类,对于汽车这个类来说,不同属性的可见性是不同的
发动机这个属性: 只在汽车引擎盖的内部可见
汽车座椅这个属性:在汽车内部可见
倒车镜这个属性:在汽车的内外部都可见

在下列代码中,CPU和memory这两个属性用privative修饰,只在当前类Computer中可见,外界是无法访问这俩个属性的。screen这个属性用public修饰,在当前项目都可见。

class Computer {
    // 这个属性的可见性只在Computer类的内部可见,对类的外部完全隐藏!
    private String cpu;//CPU
    private String memory; // 内存
    public String screen; // 显示器
}

【JavaSE】知识点总结:封装_第1张图片

 【JavaSE】知识点总结:封装_第2张图片

2. getter与setter

 当属性被private封装(隐藏)之后,在类的外部要想使用这些属性,必须通过类对外提供的方法来使用
getter:在类的外部获取某些private属性值
setter: 在类的外部设置某些private属性值

2.1 封装体现出来的保护性:

银行卡账户的卡号、密码、余额

银行卡比作一个类,产生一个银行卡对象,如果卡号、密码、余额这三个属性不隐藏,则只要能拿到银行卡对象(现实生活中的银行卡卡片),都可以随意修改这三个属性值,随意修改密码,随意修改余额。有了private之后,就算拿到银行卡的卡片,也不能随意取得以及修改这三个属性值。银行卡对象一旦产生,卡号不能修改,因此只需要对外提供getter即可;密码、余额既可以修改也要获得,因此需要对外提供getter与setter方法。(没有写余额的getter和setter方法)

BankCard类:

public class BankCard {
    // 卡号
    private String cardNum;
    // 密码
    private String password;
    // 余额
    private double balance;

    private Scanner scanner = new Scanner(System.in);

    public BankCard(String cardNum, String password) {
        this.cardNum = cardNum;
        this.password = password;
    }

    // 对于卡号来说,只需要取得值
    public String getCardNum() {
        System.out.println("请输入您的密码 : ");
        String pass = scanner.nextLine();
        if (this.password.equals(pass)) {
            System.out.println("密码正确,正在为您查询卡号");
            return this.cardNum;
        }
        return "密码错误,请查证后重新输入";
    }
    
    public String getPassword() {
        System.out.println("发送手机验证码 ....");
        // 匹配验证码
        return this.password;
    }
    public void setPassword() {
        System.out.println("请输入您之前的密码 : ");
        String pass = scanner.nextLine();
        if (this.password.equals(pass)) {
            System.out.println("请输入新密码 : ");
            pass = scanner.nextLine();
            this.password = pass;
            System.out.println("密码修改成功,请通过新密码登录");
        }else {
            System.out.println("密码错误,请查证后再输入");
        }
    }

}

Test类:

public class Test {
    public static void main(String[] args) {
        BankCard bankCard = new BankCard("13467","123456");
        String num = bankCard.getCardNum();
        System.out.println(num);
        String pass = bankCard.getPassword();
        System.out.println(pass);
        // 设置新密码
        bankCard.setPassword();
        System.out.println("获取银行卡号 : " + bankCard.getCardNum());

    }
}

类的外部要操作这些属性,必须使用类提供的方法来操作,就可以对使用者使用属性做一些规则和要求。若不使用private封装,则使用者就可以随心所欲的操作属性,无法管控 !

2.2 封装体现出来的易用性:

汽车的一键启动

汽车内部有许多复杂的工作步骤,然而我们并不需要懂汽车内部是如何工作的,如何工作只需要交给设计者来设计,我们只需要一个按钮(方法)一键启动就好了。用户只需要使用这个方法就可以将汽车成功启动,不关心有哪些具体属性,以及这些属性内部咋工作。

Car类:

public class Car {
    // 汽车发动机
    private String engine;
    // 变速箱
    private String biansu;
    // 火花塞
    private String huoHua;
    // 轮子
    private String wheel;

    // 一键启动按钮
    public void startUp() {
        engine = "点火";
        biansu = "工作";
        wheel = "轮子转动";
        System.out.println("汽车已经成功启动 ~~");
    }
}
    Car car = new Car();
    car.startUp();//一键启动汽车

思考: private能否直接修饰一个类?

答:类定义出来为了创建对象,private修饰的内容只在当前类中可见。

假设 : private可以修饰类 这个类定义之后不见了(有矛盾!)

【JavaSE】知识点总结:封装_第3张图片

3. 关于封装的总结:

1.封装:使用private进行属性和方法的封装 保护性与易用性
private Java的访问修饰符,表示属性或方法的可见性
2.被private修饰的属性或方法只在当前类的内部可见,出了当前类{ }对外部完全隐藏
在类的外部操作这些私有属性,需要类提供getter(在外部获取私有属性方法)与setter(在类的外部设置私有属性)方法
到底哪些属性且备getter与setter要看实际情况来定

3.IDEA 快捷生成getter与setter快捷键:alt + insert(智能添加方法快捷键)

你可能感兴趣的:(JavaSE,java,jvm)