Java基础——封装
最近学习Java面向对象方面的知识点,一直没时间更新博客,因为这块的知识点真的蛮绕的。一个知识点一个知识点的往外冒,而且对于我这个初学者来说区分构造器和方法就花费了一整天的时间。现在准备再重新过一遍知识点。
先背下来一个理念:
面向对象程序设计是将数据放在第一位的,然后再考虑操作数据的方法。
之前,再学习Java的优越性的时候,我们知道了Java是一种面向对象设计的程序设计语言。那到底什么是面向对象程序设计呢?要弄懂它,首先我们简单了解一下另一种程序设计。
一、面向过程程序设计:
面向过程程序设计就是自顶向下顺序执行,逐步求精;其程序结构是按照功能划分为若干个基本板块,这些板块形成一个树状结构;各模块之间的关系尽可能的简单,在功能上相对独立;每一板块内部均是由顺序、选择和循环三种基本结构组成的;其板块化实现的具体方法是使用与子程序。程序流程在写程序时就已决定。
(这个概念是我在学习面向对象时在网上找的,我把它和面向对象程序设计的概念抄在一张白纸上,其实我也不知道啥是面向过程程序设计,但是,当我学完一遍面向对象和类之后,再回来看这个概念时,是有收获的。没学过面向过程也不敢多言,仅仅学了一遍面向对象更不敢多加评论了。依照我的理解就是面向过程就像把某件事情的所有工作流程都弄成环环相扣的了,牵一发而动全身。而面向对象呢,它很聪明,它像一个制造大型机械的厂家,零件啥的它不一定都自己弄,但是它可以用尽办法去拼装(当然,拼装你也要遵循人家制定的规则),这样的好处在于,想改那块都不用担心整个工程跟着受牵连,尤其是在客户端那块。)
二、面向对象程序设计:
面向对象程序设计简称OOP,它是当今主流的程序设计范例,它已经取代了20世纪7年代的“结构化”过程化程序设计开发技术。面向对象就是把数据及对数据的操作方法放在一起,作为一个互相依存的整体,我们就叫它对象。对同类对象抽象出其共性,就形成了类。类中的大多数数据只能用于本类的方法进行处理。类通过一个简单的外部接口与外界发生关系,对象与对象之间通过消息进行沟通。程序流程由用户使用中决定。Java是完全面向对象的,必须熟悉OOP才能够编写Java程序。
(图)演示面向对象程序设计与面向过程程序设计的不同
下面这句话很重要:
面向对象的程序是由对象组成的,每个对象包含对用户公开的特定功能部分和隐藏的实现部分。(这句话真的是太重要了,以后学习单例、封装、抽象类、接口的时候,就能体会的到了!)
三、类
类(class)是构造对象的模版或蓝图。由类 构造(construct)对象的过程成为创建类的实例(instance)。
在学习这里的时候,不免会有些惊慌,那么多类都需要记住啊?自己还要创建类?自己创建的类里面的内容能想全面吗?种种疑惑在心里挥之不去。其实啊,用Java编写的所有代码多位于某个类的内部。标准的Java库提供了几千类,可以用于用户界面设计、日期、日历和网络程序设计。尽管如此,我们在弄自己的项目时,也是需要根据具体情况的不同进行增加、删除和改动的。
四、封装
封装(encapsulation,有时候被成为数据隐藏),看视频课,他们把封装形容问get、set方法。从形式上看,封装不过是将数据和行为组合在一个包中,并对对象的使用者隐藏了数据的实现方式。
对象中的数据称为实例域(instance field),操作数据的过程称作方法(method)。对于每个特定的类实例(对象)都有一组特定的实例域值。这些值的集合就是这个对象的当前状态(state)。
下面这句话很重要,背下来:
实现封装的关键在于绝对不能让类中的方法直接的访问其他类的实例域。程序仅通过对象的方法与对象的数据进行交互。
封装给对象赋予了'黑盒“特征,这是提高重用性和可靠性的关键。这意味着一个类可以全面地改变存储数据的方式,只要仍旧使用同样的方法操作数据,其他对象就不会知道或介意所发生的变化。
// 这句话是啥意思?就是说如果你哪天有需求想要定义一个Java的类,就不用担心其他的类会受到你的干扰了,你可以通过扩展一个类来建立一个你需要的新类。别忘了,实际上,在Java中所有的类都源自于一个Object。以后,我会继续介绍Object。
====封装的过程:
1.封装是将属性私有化(private);
2.你要提供get/set方法(get/set不一定都提出来,具体看你自己的需求。如果你不想让别人得到,就不提供get;如果你不想让别人设置,你就拒绝提供set。)
====访问符权限:
访问符 | 本类中 | 本包中 | 本包子类中 | 外包类 | 外包子类 |
public(常用) | 可以访问 | 可以访问 | 可以访问 | 可以访问 | 可以访问 |
protected | 可以访问 | 可以访问 | 可以访问 | 不可以访问 | 可以访问 |
缺省 | 可以访问 | 可以访问 | 可以访问 | 不可以访问 | 不可以访问 |
private(常用) | 可以访问 | 不可以访问 | 不可以访问 | 不可以访问 | 不可以访问 |
代码示例:
1 public class XiaoNanHai{ 2 private int age; 3 public void setAge(int age){ 4 if(age>=15&&age<=35) 5 this.age=age;}else{ 6 System.err.println"你输入的年龄不在指定范围内,请重新输入”); 7 } 8 }