浅谈一下Java当中的:封装

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

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

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

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

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

范围private

default

(默认权限)

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

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

class Student {
    private String name ;
    public int age ;
    
    public  void shou() {
        System.out.println("姓名: "+name);
    }
}

public class Main {
    public static void main(String[] args) {
        Student student = new Student();
        student.name = "小灶" ;  //错误用法!!
    }
}

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

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

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

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

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


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

                                成员方法设置为:public

封装拓展之包!

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

在IDEA中自定义包的用法!

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

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

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

 笔者就不再进行演示!!

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

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

class Person {
    private String name ;
    private int age ;
    
    private void eat() {
        System.out.println("吃饭!");
    }

    public  void shou() {
        System.out.println("姓名: "+name);
    }
}

public class Main {
    public static void main(String[] args) {
        Person person = new Person() ;
        person.name = "changjiang ";//错误用法!!
        person.eat();//错误用法!
    }
}

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

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

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

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

 

 

然后生成的构造方法为:

 public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

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

class Person {
    private String name ;
    private int age ;

    private void eat() {
        System.out.println("吃饭!");
    }

    public  void show() {
        System.out.println("姓名: "+name +" 年龄 "+age+" 正在吃饭!");
    }

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
}

public class Main {
    public static void main(String[] args) {
        Person person = new Person("changjiang ",20) ;
        person.show();
    }
}

上述代码的运行结果为:

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

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

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

更改后的代码为:

class Person {
    private String name ;
    private int age ;

    private void eat() {
        System.out.println("吃饭!");
    }

    public  void show() {
        System.out.println("姓名: "+name +" 年龄 "+age+" 正在吃饭!");
    }

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

public class Main {
    public static void main(String[] args) {
        Person person = new Person("changjiang ",20) ;
        person.show();
        System.out.println("=========="); //相当于分隔符
        person.setName("小金鑫");
        person.show();
    }
}

上述代码的运行结果为:

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

 

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

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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

念君思宁

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

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

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

打赏作者

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

抵扣说明:

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

余额充值