JAVA笔记(八)面向对象--封装

JAVA笔记(八)面向对象–封装

引言:java核心思想为面向对象,含有三大特性:封装,继承,多态,今天我们具体来讲解封装。

一.包的使用:

1.包使用的原因:

Windows树形文件系统,文档分门别类,易于查找和管理,使用目录解决文件同名冲突问题,在java中如何解决存放两个同名的类而不冲突?

2.包使用的意义:

  • 解决类同名问题,防止命名冲突
  • 允许类组成较小的单元(类似文件夹),易于找到和使用相应的文件
  • 更好的保护类、属性和方法

3.包的创建:

  • 作为Java源代码第一条语句
  • 用package声明包,以分号结尾

代码如下:

package cn.hz;    //包名

public class Student {
	//代码省略...
}

4.包的命名规范:

  • 包名由小写字母组成,不能以圆点开头或结尾
  • 包名之前最好加上唯一的前缀,通常使用组织倒置的网络域名
  • 包名后续部分依不同机构内部的规范不同而不同

二、权限修饰符

学习封装之前我们先要学习java中对于权限的设定方式,java中用于限定使用范围的关键字有如下四种:
权限修饰符

  • **私有权限 private:**private可以修饰数据成员,构造方法,方法成员,不能修饰类(此处指外部类,不考虑内部类)。被private修饰的成员,只能在定义它们的类中使用,在 其他类中不能调用。
  • **默认权限 default:**类,数据成员,构造方法,方法成员,都能够使用默认权限,即不写任何关键字。默认权限即同包权限,同包权限的元素只能在定义它们的类中,以及同包 的类中被调用。
  • **受保护权限 protected:**protected可以修饰数据成员,构造方法,方法成员,不能修饰类(此处指外部类,不考虑内部类)。被protected修饰的成员,能在定义它们的类中,同包 的类中被调用。如果有不同包的类想调用它们,那么这个类必须是定义它们的类的子类。
  • **公共权限 public:**public可以修饰类,数据成员,构造方法,方法成员。被public修饰的成员,可以在任何一个类中被调用,不管同包或不同包,是权限最大的一个修饰符。

三、封装

在面向对象程式设计方法中,封装(英语:Encapsulation)是指一种将抽象性函式接口的实现细节部分包装、隐藏起来的方法。

封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问。

要访问该类的代码和数据,必须通过严格的接口控制。

封装最主要的功能在于我们能修改自己的实现代码,而不用修改那些调用我们代码的程序片段。

适当的封装可以让程式码更容易理解与维护,也加强了程式码的安全性。

1.封装的定义:

将属性私有化,并提供公共的访问方式。

2.封装的优点:

  • 良好的封装能够减少耦合。
  • 类内部的结构可以自由修改。
  • 可以对成员变量进行更精确的控制。
  • 隐藏信息,实现细节。

3.封装的步骤:

我们还是以学生类为演示

  • 首先修改学生的属性的可见性来限制对属性的方法(一般限制为private),代码如下
package cn.hz;    //包名

public class Student {
    private  String  name;  //定义属性并私有化:学生姓名
    public int age;  //定义属性并私有化:学生

}

以上代码将学生的属性name和age都限定为private私有,只能本类才能访问,其他类都访问不了,如此就对信息进行了隐藏。

  • 对每个值属性提供对外的公共方法访问,也就是创建一对赋取值方法,用于对私有属性的访问,代码如下:
package cn.hz;    //包名

public class Student {
    private  String  name;  //定义属性并私有化:学生姓名
    public int age;  //定义属性并私有化:学生

    
    //提供给公共的访问方法:get获取
    public String getName() {
        return name;
    }
	//提供给公共的访问方法:set设置
    public void setName(String name) {
        this.name = name;
    }
	 //提供给公共的访问方法:get获取
    public int getAge() {
        return age;
    }
	//提供给公共的访问方法:set设置
    public void setAge(int age) {
        this.age = age;
    }
}

采用 this 关键字是为了解决实例变量(private String name)和局部变量(setName(String name)中的name变量)之间发生的同名的冲突。(this在后期关键字章节详细讲解)。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值