【JavaSE成神之路】聊聊封装这件事

简介: 哈喽,我是兔哥呀,今天就让我们继续这个JavaSE成神之路!这一节啊,咱们要学习的内容是Java的封装。

哈喽,我是兔哥呀,今天就让我们继续这个JavaSE成神之路!

这一节啊,咱们要学习的内容是Java的封装。7e29fc93ce3d4f43f5f9180b60b27160.gif

1. 什么是封装


Java的封装是指,在一个类中把一些重要的信息隐藏起来,使得外部不能直接访问。


Java的封装是一种面向对象编程技术,它把类中的属性和方法封装在一起,使外部只能通过特定的方法访问类中的属性和方法,这样可以让外部不能直接修改类中的属性和方法,从而有效控制类的内部状态。


例如,定义一个Person类,它有两个属性name和age,我们可以通过下面的代码来封装


public class Person{
    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){
        this.age = age;
    }
}

在上面的代码中,将name和age属性封装在Person类中,并且为它们提供了getter和setter方法,这样外部就只能通过这些方法来获取和修改类中的属性,从而有效地控制了类的内部状态。


并且,我们给name和age属性添加了private修饰符,这样外部就不能直接操作了。你要操作name和age属性,就得去调用对应的public方法。


再举一个例子,就好比ATM机,里面的钞票属于重要信息,是私有(private)的,你无法直接看到里面有多少钱,存放在什么位置?

129331143903635896ce2169d26e351b.png


但是,ATM机有插卡口,出钞口,以及显示屏,这些部件就是public的方法,你通过插卡和输入密码就可以进行存取款操作。

这就是封装。


2. 如何用Java代码实现封装


就是上面的例子,分两步。


01:将属性设置为private,代表私有的。


02:设置public的get/set方法,去操作私有属性。


有快捷键可以使用,快速生成get/set方法。


在idea中:


选中要生成getter和setter方法的属性,右键选择Generate;


在Generate菜单中选择Getter和Setter;


勾选要生成的属性,点击OK即可生成getter和setter方法。


在eclipse中:


选中要生成getter和setter方法的属性,右键选择Source;


在Source菜单中选择Generate Getters and Setters;


勾选要生成的属性,点击OK即可生成getter和setter方法。


3.上一节课后作业

创建一个汽车类Car,拥有品牌brand和颜色color两个属性。分别用带参构造器和无参构造器来实例化Car类,并编写toString方法。再写一个测试类,在测试类的main方法中进行测试。

参考答案:

public class Car {
    private String brand;
    private String color;
    public String getBrand() {
        return brand;
    }
    public void setBrand(String brand) {
        this.brand = brand;
    }
    public String getColor() {
        return color;
    }
    public void setColor(String color) {
        this.color = color;
    }
    //无参构造器
    public Car(){
        this.brand="";
        this.color="";
    }
    //带参构造器
    public Car(String brand,String color){
        this.brand=brand;
        this.color=color;
    }
    //toString方法
    public String toString(){
        return "Car[brand="+brand+",color="+color+"]";
    }
}

测试类:

public class CarTest {
    public static void main(String[] args) {
        //使用无参构造器实例化Car
        Car car1 = new Car();
        car1.setBrand("Bmw");
        car1.setColor("White");
        System.out.println(car1.toString()); //输出:Car[brand=Bmw,color=White]
        //使用带参构造器实例化Car
        Car car2 = new Car("Benz","Black");
        System.out.println(car2.toString()); //输出:Car[brand=Benz,color=Black]
    }
}

4.课后作业


要求体现封装思想:


某ATM机有一个储蓄账户,请编写一个Java类Account,要求:


(1)定义成员变量:int balance,表示账户余额;


(2)定义构造方法,初始化账户余额;


(3)定义存钱方法void deposit(int amount),入参为存入的金额,账户余额增加amount;


(4)定义取钱方法void withdraw(int amount),入参为取出的金额,账户余额减少amount,如果余额不足,则提示“余额不足”;


(5)定义查询方法int getBalance(),返回账户余额;

8b5c4d14fbeed3bee80da2b98191bb62.gif

相关文章
|
8月前
|
监控 网络协议 Java
《Java工程师成神之路》阿里技术专家之作,囊括Java所有知识点!
很多Java程序员一直希望找到一份完整的学习路径,但是市面上很多书都是专注某一个领域的,没有一份完整的大图,以至于很多程序员很迷茫,不知道自己到底应该从哪里开始学,或者不知道自己学习些什么。
|
8月前
|
消息中间件 Dubbo Java
24年国内头条最牛的Java面试八股文1000集,不接受反驳!
年后这个时间段, 找工作面试不要停!! 很多朋友据我了解,技术水平和工作经验都很不错,但是面试频频败北。 大家复盘下来发现问题不严重,但是很普遍,10个人里面8个都存在,那就是面试前不做准备。 技巧和避坑先不论,面试题型就不熟悉,没有系统过下大厂真题和必问项目,真正对线上面试官时被打的措手不及。 想要从容应对,就要提前建立把握和自信,这不但来自自身的技术能力水平,更来源于对面试时将要发生的各种情况有预判,做到心中有数。 这里整理了一套跳槽涨薪大厂Java知识点解析及面试题解析,涵盖20个技术栈的大厂面试题及详解文档,各大厂技术重点、面试难点、进阶要点,帮助大家“临阵磨枪”,如有需要的
|
8月前
|
消息中间件 人工智能 Java
面试了一个前阿里P7,Java八股文与架构核心知识简直背得炉火纯青
前几天,跟个老朋友吃饭,他最近想跳槽去大厂,觉得压力很大,问我能不能分享些所谓的经验套路。 每次有这类请求,都觉得有些有趣,不知道你发现没有大家身边真的有很多人不知道怎么面试,也不知道怎么准备面试,哪怕是一些工龄比较长的“老开发”: 有的人明知道有些问题肯定会被问,面试前还不好好准备,结果要么回答得模棱两可,要么答非所问; 有的人则是不知道怎么包装自己的项目经历,结果明明还不错的项目却看上去平平无奇,过后就被面试官忘了; 更有甚者,简历写得花里胡哨,结果一问三不知,简历和经历完全对不上。
|
设计模式 架构师 Java
真香!阿里Java知识体系详细总结(2023版)被我搞到手了
又是新的一年,每一年都会有人在成为架构师的路上或者已经成为自己心中理想的架构师,但更多的人是在程序员的这条路上缓慢成长甚至迷茫。
【JavaSE专栏23】Java反射有多强? 他拥有这五大神奇功能!
【JavaSE专栏23】Java反射有多强? 他拥有这五大神奇功能!
|
存储 IDE Java
【JavaSE成神之路】Java面向对象(上)
哈喽,我是兔哥呀,今天就让我们继续这个JavaSE成神之路! 这一节啊,咱们要学习的内容是Java的面向对象。
178 1
【JavaSE成神之路】一文洞悉Java的方法
哈喽,我是兔哥呀,今天就让我们继续这个JavaSE成神之路! 这一节啊,咱们要学习的内容是Java语言的方法。
|
IDE Java 编译器
【JavaSE成神之路】Java面向对象(下)
哈喽,我是兔哥呀,今天就让我们继续这个JavaSE成神之路! 这一节啊,咱们要学习的内容还是Java的面向对象。
125 0
|
算法 Java
【JavaSE成神之路】数组思考题讲解
哈喽,我是兔哥呀,今天就让我们继续这个JavaSE成神之路! 这一节啊,咱们要学习的内容是数组的思考题讲解,也就是上一节我留下的两个小作业。
113 0
【JavaSE成神之路】流程控制语句
哈喽,我是兔哥呀,今天就让我们继续这个JavaSE成神之路! 这一节啊,咱们要学习的内容是流程控制语句。
130 0

热门文章

最新文章