Java 面向对象编程 阐述(一)
1、面向对象编程
l 面向对象编程(Object Oriented Programming,OOP)是将现实生活中的概念通过程序进行模拟,其中有两个最重要的概念:对象、类
l 对象具有属性和行为
l 对象是指某个具体事物,而同一类事物有其共性,属性和行为就是其共性
l 对这些共性进行归纳,就形成了类,这个过程我们称为抽象
2、类、对象与面向对象编程
l 以前的编程方式是面向过程,每个具体的功能都需要我们去进行具体的实现
l 面向对象的思路则不同,我们需要完成某个功能,只需要向对象发送一个“命令”,而具体怎么完成功能,是由该对象所属的类去定义的
3、类的定义
l 类是一个模板,用于创建同一类型的对象
l 面向对象编程的基本元素是类,类确定了对象的形式和行为
4、类的声明1
l 在Java中定义一个类使用关键字class ,一个合法的标识符和一对表示程序体的大括号
l <classname>代表类的名称,类名是一个名词,采用大小写混合的方式,每个单词的首字母大写。
l <body of the class>包含属性和方法的声明
5、类的声明2
l 理解类的最重要的事情就是它定义了一种新的数据类型
l 类一旦定义后,就可以用这种新类型来创建该类型的对象。这样,类就是对象的模板(template),而对象就是类的一个实例(instance)。
l “类”不具备做事的功能:事情由类来定义,但事情是由对象来做的。类是虚拟的,对象才是实实在在的,但对象是由类这个模板产生的
6、类的属性
l “人类”具有了姓名、年龄、性别、地址等属性,对于一个人来说,一旦被创造出来,就具有了这些特征
7、类的行为
l “行为”是完成某个具体的动作,用方法来表示行为
8、类的层次结构
l 类中定义属性与方法,表明了由这个类产生的对象所具有的特征与可以进行的操作
9、对象
l 注意,到此为止,虽然类已经比较完善了,但自始至终并未真正产生一个能做事的对象来,我们只是把所有人的公共特点、行为通过类的形式归纳抽象了出来,那我们到底该怎么使用这个类呢?该如何通过这个类,产生一个具有姓名、年龄等属性,可以吃饭、跑步的对象来呢?
10、对象的创建
l 类的声明是对某一类事物的描述,是一种抽象,要想使用类,需要生成该类的对象
l 就好比我们要使用电脑,不可能使用设计图纸帮我们工作,而是需要某一台真正的电脑。设计图纸就是类,而大家使用的电脑则是该“类”电脑的一个对象。所以学完了类的声明,我们来学习如何创建类的对象。
11、使用关键字new创建对象
l 创建对象可以使用关键字new,语法如下
l 生成一个“人类”对象就好比一个新baby的降生,第一句代码实际上只是表示“我们要生一个baby,名字已经起好了,叫p”,第二句才是真正的baby降生(内存分配)
12、使用关键字new创建对象2
l 要是这个baby正在出生的时候起名字呢?我们通常会采取下面这种声明方式:
l 和定义简单类型的变量是类似的,只不过需要new关键字来产生对象,而简单数据类型可以直接赋值
13、通过对象访问属性和行为
l 通过“.”来调用对象的属性和行为
14、增加一个自我介绍的方法
l 上例中属性和方法都是在main方法内才被调用的,其实,我们可以更灵活一点
15、属性的默认值
l 在定义类的属性后,使用的过程中,如果没有给这些属性赋值,那么JVM系统将自动为这些属性赋默认值
l 数值类型的初始值为0,对于char类型,其值为“\u0000”,显示为空字符,boolean类型的初始值为false,而引用类型(如String)的初始值为null
l 虽然说每一个类的属性均会有默认值,但是为了避免错误,我们应当在使用这些属性之前,对每一个属性进行手工赋值
16、构造方法1
l Person是类型、p是对象名、new分配内存
l 那么 Person()是什么?
l 我们没有定义过这个方法
l 该方法名和类名相同
17、构造方法
l 其实,“Person()”方法叫做构造方法,构造方法其实就是生产对象的方法、方式
l 而“new Person()”的意思是,通过“Person()”这个构造方法所指定的方式来生产一个人类对象
l “Person()”构造方法由系统自动生成,所以我们才得以使用
l 既然是方法,那么当然可以接受参数
l 无参数的构造方法
l 有参数的构造方法
18、无参数的构造方法1
l 对于一个类,如果我们不自定义构造方法,那么程序会自动构建无参数构造方法
19、无参数的构造方法2
l 构造方法的名称与类名一样,且构造方法没有返回值
l 当类中已经创建了构造方法时,编译器就不再为类自动创建构造方法
l 编译器自动创建的构造方法为空方法,当然,我们自定义构造方法时,可以更加灵活的运用
20、无参数的构造方法3
l 但是这也存在一个问题,即每次我们创建对象时,初始化代码总是重复执行一样的内容,例如上例,每次创建的Dog对象,名字均为“旺财”
l 有没有办法能够实现在创建对象的同时,自由指定属性的值呢?答案是肯定的,这需要我们更进一步,来看看带参数的构造方法。
21、带参数的构造方法1
l 带参数的方法可以更灵活的让我们给属性赋值
22、带参数的构造方法2
l 在类中已经声明了一个带参数构造方法的情况下,编译器还会不会自动生成无参数的默认构造方法呢
l 需要手工加上无参数构造方法的声明
24、方法重载
l 一个类中可以有多个方法,方法名相同,参数列表不同,这叫做方法的重载。
l 事实上,重载的方法由于其参数列表的不同,根本上就是不同的方法
25、this关键字
l 这么写正确吗?
l this 关键字的含义:可以为调用了其方法的那个对象生成相应的句柄。也就是说,哪个对象调用了方法,那么这个方法内的this指的就是哪个对象
26、static关键字
l 如果一个成员被声明为static,它就能够在它的类的任何对象创建之前被访问,而不必引用任何对象
l static成员的最常见的例子是main(),因为在程序开始执行时必须调用main(),所以它被声明为static
l 声明为static的方法有以下几条限制:
l 它们仅能调用其他的static方法。
l 它们只能访问static数据。
l ·它们不能以任何方式引用this或super