Java是一种面向对象的语言,所以理解面向对象的编程思想对学习Java是相当重要的。
这篇主要想理清的问题很简单就只有两个:
- 什么是面向对象?
- 如何理解封装?
首先来看第一个问题, 对于初学者来说想要一次性完全理解面向对象是很困难的,要有一定代码量之后再回头看就会有新的理解。这里就先灌输一个概念,只要有印象就行。
面向对象时一种符合人类思维习惯的编程思想,比如现实生活中有各种各样的事物,这些事物有着各种各样的联系。程序中使用对象来映射现实中的事物,使用对象的关系来描述事物之间的联系,这种思想就是面向对象。
不能理解这段话没关系,我们可以对比面向过程来看看。面向过程是C语言的特点,它就是分析解决问题所需要的步骤,然后用函数把这些步骤一一实现,使用的时候一个一个调用便OK。而面向对象则是把解决的问题按照一定的规则划分为多个独立的对象,然后通过调用对象的方法来解决问题的。当然,一个程序会包含多个对象,通过多个对象相互配合来实现应用程序的功能,这样当程序发生需求变动的时候,只需要改动相关的对象,从而使代码更容易去维护。
如果用吃来做比喻,自己做则是面向过程,买菜、配菜、煮饭、炒菜,自己必须要依次实现这些过程,最后才能吃到美味可口的饭菜,面向对象则好比是下馆子,只需点菜而做菜的过程已经被饭馆封装起来,这里不需要关心厨师是如何做菜的只要品尝菜是否美味可口。
面向对象的三个特点:封装,继承,多态。今天我们主要谈谈封装。
第二个问题,我们要如何理解封装?
封装是面向对象的核心思想,将对象的属性和行为封装起来,不需要让外界知道其实现细节,这就是封装思想。我们来看下面这段代码:
public class Test{
public static void main(String[] args){
Student stu = new Student();
stu.name = "妞妞";
stu.age = 1000;
stu.show();
}
}
这段代码中将年龄赋值为1000岁,这在程序中当然不会有任何问题,可是在现实生活中却是违背常识的。为了解决这个问题,在设计类的时候,应该对成员变量的访问做出限制,不允许外界随意访问,这就需要实现类的封装了。
从定义上来说,类的封装主要指在定义一个类的时候,将类中的属性私有化,即使用private关键字来修饰,被private修饰的属性只能在它所在类中被访问。同时,为了让外界访问私有属性,需要一些公共方法,其中就包括用于设置属性值的setter()方法和获取属性值得getter()方法,下面的代码就实现了类的封装:
在图中的Student类中,使用private关键字将属性name和age声明为私有不允许外界随意访问,只能通过setter方法来操作两个实例变量的值。而在setter方法中可以增加自己的控制逻辑,从而保证Student对象的name和age两个实例变量不会出现与实际不符合的情形。
另外在啰嗦两句,进行程序设计的时候,应尽量避免一个模块直接操作另一个模块的数据,模块设计追求的是高内聚(尽可能把模块的内部数据、功能实现细节隐藏在模块内部独立完成,不允许外界直接干预)低耦合(仅暴露少量的方法给外部使用)。正如我们平常使用的手机APP,不需要去关心里面的代码实现细节,只要能满足我的需求便可以。
第二篇技术文了,都是Java中非常基本的内容。看和写真的是两个过程。看、理解简单,但想把理解的东西写出来却不容易,须得搜肠刮肚遣词造句不断的思考“要如何布局才能让读者轻松get到我的想法”,此过程中又不知不觉加深了对该知识点的理解。每天一篇终会有质的飞跃,与读到此文的人共勉。