黑马程序员_面向对象思想概述和三大特性之一——封装

---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IOS开发</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------

一、面向对象的概念

1、什么是面向对象?

面向对象是相对于面向过程而言的。面向对象和面向过程都是一种编程思想。学过C、C++语言的同学应该知道它们都是面向过程的语言,强调的是功能的行为。其实,java中的函数也是面向过程的,每个函数都实现了一个功能。我们学习的java语言是面向对象的语言,就是把很多功能进行封装,强调的是具备了功能的对象。既然对象封装了很多功能,每个功能都是一个函数,每个函数又都是面向过程的。那么面向对象也就是基于面向过程的。

2、面向对象的特点

1)是一种符合人们思考习惯的思想。

比如现实生活中我们经常接触的手机就是人们使用面向对象思想制造的一个事物。首先,手机上有显示屏,可以上网聊天、玩游戏、看电影;手机上有键盘,可以拨号打电话、发短信、上网发表QQ留言等;手机上有扬声器,可以听音乐、通话等。人们把显示屏、键盘和扬声器等硬件封装(组合)到一块儿,就形成了手机。想要打电话,就使用手机的拨号打电话功能;想要玩游戏,就使用手机的上网玩游戏功能。我们不需要知道手机内部是如何工作的,只是在需要时,使用手机里封装的不同功能而已。

2)可以将复杂的事情简单化。

比如我们想要完成去上班时,关门和锁门这样一个过程。如果我们使用面向过程的思想编程,我们要写两个功能,功能里面分别实现关门和锁门这样一个动作。比如:关门(){***} 锁门(){***}。现在我们采用面向对象的思想编程,首先,把门封装成一个对象,因为关门和锁门都是门的功能,所以我们在门这个对象里面封装了关门和锁门的方法。那么,完成这个过程,我们只需要调用门的方法即可。比如:门.关门();门.锁门;。这样我们在完成这么一个过程时,只需要找到门这个对象,调用它的两个方法即可,不用把这两个方法中的内部具体实现代码再写一遍了。

3)将程序员从执行者转换成了指挥者。

以上面的那个关门和锁门的过程为例,面向过程的思想是让我们把关门和锁门这两个方法写出来,那我们就是执行者。而面向对象的思想是让我们调用门的关闭和上锁的方法即完成了这个过程。我们成了指挥者,只在需要时,调用门的方法即可。

4)在完成某个需求时,先要去找具有所需的功能的对象来用。如果该对象不存在,那么就创建一个具有所需的功能的对象。这样简化开发,并提高程序功能的复用性。

比如:我们的项目很大,同样的一个方法,这一块功能要使用这个方法,那一块功能也要用到这个方法。那我们就可以把这个方法封装到一个对象中,实现这一块可以调用,那一块也可以调用,这样就提高了程序的复用性。

3、面向对象的开发、设计和特性

面向对象的开发过程就是不断地创建对象,使用对象,指挥对象做事情。

面向对象的设计过程就是管理和维护对象之间的关系。

面向对象的三大特性:封装、继承和多态。这三大特性将在后面的博客中有说明。

二、类与对象的关系

使用计算机语言就是不断地描述现实生活中的事物。现实生活中的事物很多很多,每个事物在java中都是一个对象,都有自己的属性和功能。我们可以把具有相同属性和功能的一些事物抽取出来,用一个抽象的概念描述它们,这就是java中的类。在java中描述事物通过类的形式体现。

比如制造月饼的模子,因为它有形状、大小等属性,用这个模子制造的月饼都是一个形状的、相同大小的。那么每一个月饼就是一个对象,这个制造月饼的模子就是一个类。

在java中,描述一个类也是通过描述这个类的属性和功能来体现的。java中类的属性对应类的成员变量,类的功能对应类的成员方法。定义一个类,其实就是定义这个类的成员变量和成员方法。

三、面向对象的三大特性之一——封装

1、什么是封装?

封装就是隐藏对象的属性和内部功能的实现细节,仅提供公共的访问方式。

比如一个学生对象,他有学号、姓名、性别、年龄、身高、体重、籍贯等等很多属性,他还有学习的方法。我们如果想访问这个学生,没有必要知道他的学号、身高、体重等信息,也没有必要知道他是具体如何学习的。现实生活中我们了解的很多人都只是知道姓名、性别和工作职业而已吧。那么在java中就可以把这个学生对象的其它属性和方法私有化,只是提供共有的访问方式即可。

2、封装的好处

将变化隔离;便于使用;提高重用性;提高安全性。

比如下面的代码:以Student类举例,如果我们想要调用学生自我介绍的方法,我们可以创建一个学生对象,然后调用它的方法即可。

代码:Student s1=new Student();s1.print();

这样便于使用,因为我们把学生自我介绍的内容都封装到了print()方法中,调用方法就等于学生自我介绍了。不同的类中都可以调用这个学生自我介绍的方法,这样也提高了代码的重用性。

提高安全性是说如果我们想要给学生对象设置年龄,因为age属性是private修饰的,我们不能直接访问,可以调用setAge()方法,传个参数即可。如果我们传个非法的参数,比如将学生的年龄设置为-1,那么我们可以在这个setAge()方法中进行判断,过滤掉非法数据,这样就提高了程序的安全性。

3、封装的原则

将不需要对外提供的内容都隐藏起来。把属性都隐藏,提供公共的方法对其访问。

如下面的代码所示,学生的name和age属性都私有化了,提供了对外的set和get方法分别对其访问。

package cn.itcast.ch01;

public class Student {
  private String name;  //学生姓名
  private int age;      //学生年龄

  //获得姓名的方法
  public String getName() {
	return name;
}
//设置姓名的方法
public void setName(String name) {
	this.name = name;
}
//获得年龄的方法
public int getAge() {
	return age;
}
//设置年龄的方法
public void setAge(int age) {
	if(age<16){
		System.out.println("年龄不能小于16岁!");
		this.age=16;
	}
	else{
	this.age = age;
	}
}
//自我介绍的方法
public void print(){
	  System.out.println("自我介绍:我的姓名是:"+name+",年龄是:"+age);
  }
}

 

四、构造函数

1、特点

1)构造函数的名称与类名相同。

2)不用定义返回值类型,没有返回值。

3)不可以写return语句。

2、作用

给对象进行初始化。

初始化对象的成员变量、成员函数等等信息。

注意:系统会默认给每个类一个没有参数的空参构造方法,假如手动添加了一个构造方法,那么默认的这个空参构造方法就不存在了。

多个构造函数是以重载的方式存在的。

五、this关键字

1、特点:

this关键字代表其所在函数所属对象的引用。

也就是说,哪个对象在调用this所在的函数,this就代表哪个对象。

2、应用:

当定义类中功能时,该函数内部要用到调用该函数的对象时,这时就用this代表这个对象。但凡本类功能内部使用了本类对象,都用this表示。

六、static关键字

1、用法:

是一个修饰符,用于修饰成员(成员变量和成员函数)。修饰后的成员称为静态成员。当成员被static修饰后,就多了一个调用方式,不仅可以被对象调用,还可以直接被类调用。格式:类名.成员名称。

2、特点:

1)随着类的加载而加载。

也就是说,静态成员随着类的消失而消失,它的生命周期最长。

2)优先于对象存在。

先有类,而后才可以创建对象。类加载时,静态成员已经存在了。

3)被所有对象共享。

静态数据是属于类的,该类的对象共享这些静态数据。

4)可以直接被类名调用。

3、使用时的注意事项:

1)静态方法只能访问静态成员。

非静态成员是随着对象的存在而存在,当静态方法初始化后,对象还没有创建,因此不能访问非静态成员。

2)静态方法中不可以定义this、super关键字。

因为静态优先于对象而存在,所以,静态方法中不可以使用还没有初始化的数据。

3)主函数是静态的。

---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IOS开发</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------

详细请查看:<a href="http://edu.csdn.net" target="blank">http://edu.csdn.net</a>

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值