Java面向对象——封装 详解

java基础

**

Java面向对象之封装

**

上一篇博客中简单介绍了类与对象,我们知道,Java是面向对象语言。此篇博客则对Java的面向对象的特征——封装简单概述一下。

Java面向对象——封装 详解_第1张图片

    首先我们知道,面向对象的基本特征是封装、继承、多态。

    首先我们对封装进行分析。

Java面向对象——封装 详解_第2张图片

封装:

我们的java里那个public class 类名{}中,为什么是public呢?

   这里这就是因为我们的关键字,下面我将对封装的几个关键字进行分析

关键字:public、protected、private

private 默认权限 protected public
同一个类
同一个包
子类
全局

上面四个分别代表了各自关键字所控制的访问权限。

我们一般给类的成员private权限。

然后给成员相应的get、set方法

get、set相应的业务逻辑代码

作用:“高内聚,低耦合”

    高内聚:类内部的数据操作细节自己完成,不允许外部干涉。

    低耦合:仅暴露少量的方法供外部使用,尽量方便外部调用。

这么一搞,我们的成员属性就被我们的类给控制起来,没有类的同意,这个属性是没有办法修改的,这就达到了我们Java的封装性。

Java面向对象——封装 详解_第3张图片

特点:

    1、隐藏了功能实现过程,外界只需要通过公共的访问方式访问即可。

    2、提高了代码的复用性。

    3、提高了程序安全性。

Java面向对象——封装 详解_第4张图片

public class User{//这是我们的实体类

	private String name;//属性名字

	private int age;//属性年龄

	//属性年龄和名字的get、set方法

	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;

    }
}
public class test{

    public static void main(String[] args) {

        //User.name;User.age;  name;age;
        //我们发现这两种形式直接报错

        User user = new User();

        user.
    }
}

我先写到这里。猜一猜这个user.能.出来什么

Java面向对象——封装 详解_第5张图片

我们一起来看看

Java面向对象——封装 详解_第6张图片 Java面向对象——封装 详解_第7张图片

还记得我的User类里怎么写的了么。忘了的往上翻

private String name;//属性名字

private int age;//属性年龄

public void setAge(){}…

发现我们的属性是private,而方法是public

所以我们不能直接用user点出来name和age

这就是我们封装的用法了。它提高了程序的安全性和复用性。我们之后业务层代码将经常使用这个Java的封装性。

属性注入:

    属性注入是我们对一个实体类属性的设置。

    学习了封装性后,我们知道,一般我们不建议将实体类的属性权限设置高,一般使用private。

    但private我们知道,它使得这个属性只能在本类里使用这个属性。

因此:我们在其他业务层使用代码书写时用到了这个实体类,要对它进行属性的书写,我们目前有两种实现方式。

    1、有参构造方法属性注入

        注意:书写有参构造函数后,默认构造函数则不会生效。自己在书写一个无参的构造函数即可,内容无即可。(不报错的原因之后解释)

    2、使用set方法属性注入

    使用这两种方式时,我们要在实体类里书写相应的东西,即构造函数和set方

    有了这个两个,我们便可使用对象对对象的属性赋值

同样,很多编译器会在你写好属性后有generous生成get/set方法和构造方法

idea              eclipes

Java面向对象——封装 详解_第8张图片

上一篇 》
类和对象

下一篇 》
面向对象——继承

你可能感兴趣的:(JavaSE,#,JAVA-基础)