• 浅谈一下Java当中的:封装


    对于Java ,想必在刚接触到Java的时候,大家都已经听过:Java主要是用来面向对象的,而面向对象有三大特性:封装继承,多态,今日所讲述的主要就是:封装!!

    对于封装,我们首先需要知道的是:什么是封装??封装有什么意义呢??弄懂了这俩,那么封装你就学习的差不多了!!

    对于封装的简单来说就是:套 壳屏蔽细节!!

    封装:将数据和操作数据的方法进行有机结合,隐藏对象的属性和实现细节,仅对外公开接口来和对象进行交互!!把类的实现细节进行了隐藏,对外只提供一些交互的接口就可以!!

    下面就在Java中使用的四种访问修饰限定符来安排一波:

    范围private

    default

    (默认权限)

    protectedpublic
    同一包中的同一类可以可以可以可以
    同一包中的不一类可以可以可以
    不同包中的子类(继承关系)可以可以
    不同包中的非子类可以

    下面就private进行简单讲解一下:提示,下面是错误的用法讲解!!!

    1. class Student {
    2. private String name ;
    3. public int age ;
    4. public void shou() {
    5. System.out.println("姓名: "+name);
    6. }
    7. }
    8. public class Main {
    9. public static void main(String[] args) {
    10. Student student = new Student();
    11. student.name = "小灶" ; //错误用法!!
    12. }
    13. }

    在类Student中定义的: private String name ; 只能在当前类中才能使用!!否则,将会报错!!

    因此,对private 修饰的,只能在当前类使用

    public :可以理解为:一个人的外貌特征,谁都可以看得到!

    default (默认权限):对于自己家族中(同一包中)不是什么秘密,对于其他人来说,就是隐私了!

    private : 只有自己知道,其他都不知道!


    注意:一般情况下:成员变量设置为:private

                                    成员方法设置为:public

    封装拓展之包!

    在Java中引入了包,包是对类、接口等的封装机制的体现,是一种对类或者接口等的很好的组织方式,比如:一 个包中的类不想被其他包中的类使用。包还有一个重要的作用:在同一个工程中允许存在相同名称的类,只要处在 不同的包中即可。

    在IDEA中自定义包的用法!

    1.右键点击src ——》new ——》Package

     2.点击Package ,一般采用倒序命名方法!!(com.shandong.www)

    通过下面图示操作,就可以对创建好的包的显示情况进行调整!!

     笔者就不再进行演示!!

    封装之:private 只能在当前类中使用

    下面就案列讲解一下(错误用法)!!

    1. class Person {
    2. private String name ;
    3. private int age ;
    4. private void eat() {
    5. System.out.println("吃饭!");
    6. }
    7. public void shou() {
    8. System.out.println("姓名: "+name);
    9. }
    10. }
    11. public class Main {
    12. public static void main(String[] args) {
    13. Person person = new Person() ;
    14. person.name = "changjiang ";//错误用法!!
    15. person.eat();//错误用法!
    16. }
    17. }

    在上述的代码中,name  , age  ,eat   这些成员已经被封装起来了!!只能在当前类当中使用!

    使用private 关键字进行了封装时,name 的权限就变小了,他只能在当前类才能访问!!

    因此,我们可以通过构造方法来读上述代码中,封装好的name ,age ,eat 进行赋值!!

    构造方法包含:不带参数的构造方法,带有参数的构造方法!而IDEA可以帮我们自动生成构造方法!!鼠标右键,——》Generate ——》 Constructor ——》 选择想要构造的方法(摁住CTRL键,可以多选)  点击OK,然后就能生成带参数的构造方法了!!

     

     

    然后生成的构造方法为:

    1. public Person(String name, int age) {
    2. this.name = name;
    3. this.age = age;
    4. }

    因此,上述的总代码为:(正确代码)

    1. class Person {
    2. private String name ;
    3. private int age ;
    4. private void eat() {
    5. System.out.println("吃饭!");
    6. }
    7. public void show() {
    8. System.out.println("姓名: "+name +" 年龄 "+age+" 正在吃饭!");
    9. }
    10. public Person(String name, int age) {
    11. this.name = name;
    12. this.age = age;
    13. }
    14. }
    15. public class Main {
    16. public static void main(String[] args) {
    17. Person person = new Person("changjiang ",20) ;
    18. person.show();
    19. }
    20. }

    上述代码的运行结果为:

    但是,疑问又来了:在上述的代码中,如果我想更改传过去以后的姓名,该如何操作??

    需要getter 和setter 这两个方法!!

    1. public String getName() {
    2. return name;
    3. }
    4. public void setName(String name) {
    5. this.name = name;
    6. }

    因为private不能直接访问,则通过getName和setName 来对那些封装(private)的数据来进行交互!

    更改后的代码为:

    1. class Person {
    2. private String name ;
    3. private int age ;
    4. private void eat() {
    5. System.out.println("吃饭!");
    6. }
    7. public void show() {
    8. System.out.println("姓名: "+name +" 年龄 "+age+" 正在吃饭!");
    9. }
    10. public Person(String name, int age) {
    11. this.name = name;
    12. this.age = age;
    13. }
    14. public String getName() {
    15. return name;
    16. }
    17. public void setName(String name) {
    18. this.name = name;
    19. }
    20. }
    21. public class Main {
    22. public static void main(String[] args) {
    23. Person person = new Person("changjiang ",20) ;
    24. person.show();
    25. System.out.println("=========="); //相当于分隔符
    26. person.setName("小金鑫");
    27. person.show();
    28. }
    29. }

    上述代码的运行结果为:

    但是,上面内容仅仅更改一个,当我们想更改多个数据的时候,IDEA就可以帮助我们进行写!!右键——》Generate ——》Getter and Setter  …………然后就会帮我们自动生成!!

     

    上面单独的Getter Setter会生成单独的对应方法!!(自行尝试!)

    因此,总的来说:封装:对类的内部的细节进行了隐藏,但同时提供了相对应的公开的接口,供用户和数据进行交互!!

  • 相关阅读:
    【鸿蒙 HarmonyOS 4.0】通知
    05-Spring Boot工程中简化开发的方式Lombok和dev-tools
    同花顺_代码解析_技术指标_R
    Go: 关于定时任务
    网络安全(黑客)自学
    AT2366-[AGC012F]Prefix Median【dp】
    【Python学习笔记】字符编码
    爬虫系列:爬虫验证码识别
    【剑指offer】Java中数组、字符串的长度获取区别 length、length()、size()
    50etf期权的隐含波动率是什么意思?最通俗易懂的解释!
  • 原文地址:https://blog.csdn.net/weixin_64308540/article/details/127954249