1. 什么是面向对象
面向对象是学习 Java 必须掌握的知识, 也是 Java 里的一个重难点. 那什么是面向对象呢?
在讲解面向对象之前, 我们得解决一个问题, 什么是对象?
对象, 从字面意思来看就是我们面对的物象. 由此我们便可以知道, 万事万物皆为对象. 比如: 一台电脑, 一辆汽车, 一部手机等等都是对象.
面向对象, 从字面意思来看就是我们人面对着一个对象. 其实就是指我们从这个对象的整体出发去看它, 它由哪些部件组成, 它可以做到哪些事情.
比如我们想要买一部手机, 我们想要内存大一点的, 最新款的, CPU 运算快一点的, 能实现发短信和打电话功能的手机. 那么这部手机是不是对象呢? 它不是. 当我们买了一部 iPhone 6 后, 它满足我们上面的所有信息. 于是我们拿在手上的这部 iPhone 6 就是我们的对象. 于是我们知道, 对象一定是一个具体的, 确定的物体.
而这部手机它的样式, 颜色, 大小, 产地, 编号等等, 便是这部手机的 "属性", 这部手机可以打电话, 发短信, 便是它的 "行为".
面向对象的思想, 体现的是人所关注对象的信息聚集在了一个具体的物体上. 人们就是通过对象的属性和行为来了解对象.
2 . 类
对于一个具体的对象而言, 比如上面我们说的那一部 iPhone 6, 世上还有许多跟这部手机有着同样属性或行为的对象, 我们为了方便将它们归类起来, 提取出他们相同的属性和行为, 而我们把归类起来的这个抽象的概念, 称之为类.
比如每个人就是一个对象, 小张是一个对象, 小明是一个对象. 而每个人虽然不同, 但却有许多相同的属性和行为, 于是我们可以把他们抽象出来, 变成一个类, 比如人类.
类是封装对象的属性和行为的载体, 反过来说具有相同属性和行为的一类实体被称为类.
由此我们可以总结出类的定义:
类是相同或相似对象的一种抽象, 是对象的一个模板, 它描述一类对象的行为和状态.
类是具有相同属性和方法 (行为) 的对象的集合
我们在上面反复强调对象的属性和行为, 什么是对象的属性呢? 什么又是对象的行为呢?
属性是对象具有的特征. 每个对象的每个属性都拥有特定值. 我们上面讲过对象是一个具体并且确定的事物, 正是对象属性的值来区分不同的对象, 比如我们可以通过一个人的外貌特征区分他.
那什么是对象的行为呢? 在计算机中我们通过方法去实现对象的行为, 而对象的方法便是对象所具有的操作, 比如人会走路, 会哭泣, 会学习等等都是人的行为, 也就是人的方法.
类和对象之间有什么关系吗? 在上面的讲解中大家应该有些了解了. 类就是对象的抽象(或者模板), 对象就是类的具体(或者实例). 比如手机是一个抽象的概念, 它代表着类. 而一部 iPhone 6 便是手机具象化处理的实体, 也就是一个对象.
说了那么多, 那我们如何在计算机中定义一个类, 如何实现一个类呢?
我们以前说过, Java 是面向对象的语言, 而他的体现就在于 Java 程序都以类 class 为组织单元. 而一个类是对象的抽象, 所以类由属性和方法两部分组成.
定义一个类, 主要有三个步骤:
1, 定义类名, 用于区分不同的类. 如下代码中 public class 后面跟的就是类名. class 是我们声明类的关键字, 类名后面跟上大括号, 大括号里面就是我们类的一些信息. public 我们会在后面详细讲解, 大家先记着就行了.
2, 编写类的属性. 对象有什么, 我们通过属性来表示. 属性的定义我们是写在类名后面的大括号里, 在定义属性时, 要明确属性的类型. 在一个类当中可以写一个或多个属性. 当然也可以不定义属性.
3, 编写类的方法. 方法也是写在大括号里面. 我们可以定义一个方法或多个方法, 当然也可以不定义方法.
例如: 人这个类有什么属性和方法(当然会很多很多, 有些时候我们只关注我们需要的信息就可以了).
一个类可以包含以下类型变量:
局部变量: 在方法, 构造方法或者语句块中定义的变量被称为局部变量. 变量声明和初始化都是在方法中, 方法结束后, 变量就会自动销毁.
成员变量: 成员变量是定义在类中, 方法体之外的变量. 这种变量在创建对象的时候实例化. 成员变量可以被类中方法, 构造方法和特定类的语句块访问.
类变量: 也叫静态变量, 类变量也声明在类中, 方法体之外, 但必须声明为 static 类型.
3. 构造方法
在面向对象中有一个非常重要的知识点, 就是构造方法. 每个类都有构造方法. 如果没有显式地为类定义构造方法, Java 编译器将会为该类提供一个默认构造方法.
在创建一个对象的时候, 至少要调用一个构造方法. 构造方法的名称必须与类同名, 一个类可以有多个构造方法.
1, 构造方法的名称与类名相同, 且没有返回值. 它的语法格式如下:
下面是一个构造方法的例子:
又例如具体的构造方法:
上面的例子中通过 new 关键字将类实例化成对象, 而 new 后面跟的并是构造方法. 于是可以知道 new + 构造方法可以创建一个新的对象.
2, 如果我们在定义类的时候没有写构造方法, 系统会默认给我们生成一个无参构造方法, 不过这个构造方法什么也不会做.
3, 当有指定的构造方法时, 系统都不会再为我们添加无参构造方法了.
4, 构造方法的重载: 方法名相同, 但参数不同的多个方法, 调用时会自动根据不同的参数选择相应的方法.
4. 对象
在前面我们已经理解了对象的含义, 那么我们该如何根据我们定义的类创建对象呢? 我们又该如何使用我们的对象呢?
对象是根据类创建的. 在 Java 中, 使用关键字 new 来创建一个新的对象. 创建对象需要以下三步:
声明: 声明一个对象, 包括对象名称和对象类型.
实例化: 使用关键字 new 来创建一个对象.
初始化: 使用 new 创建对象时, 会调用构造方法初始化对象.
具体例如:
创建对象的语法如下:
比如对 People 这个类, 我想实例化 LiLei 这个人. LiLei 的数据类型便是 People 这个类型.(类可以看成使我们自己定义的数据类型).
我们在上一讲中介绍形参和实参的时候画了内存图, 定义类的时候是不会为类开辟内存空间的, 但是一旦创建了对象, 系统就会在内存中为对象开辟一块空间, 用来存放对象的属性值和方法.
创建对象后, 我们就要使用对象了, 使用对象无非就是对属性和方法进行操作和调用. 语法如下
刚刚我们引入了成员变量这个概念, 那什么是成员变量呢? 成员变量就是指的对象的属性, 是在类中定义, 来描述对象的特性. 还有一种变量叫局部变量, 它是由类的方法定义, 在方法中临时保存数据.
在使用时注意, 我们的成员变量可以被本类的所有方法所使用, 同时可以被与本类有关的其他类所使用. 而我们的局部变量只能在当前的方法中使用.
在这里我们要讲到一个关于作用域的知识了. 作用域可以简单地理解为变量的生存期或者作用范围, 也就是变量从定义开始到什么时候消亡.
局部变量的作用域仅限于定义它的方法内. 而成员变量的作用域在整个类内部都是可见的.
同时在相同的方法中, 不能有同名的局部变量; 在不同的方法中, 可以有同名的局部变量.
成员变量和局部变量同名时, 局部变量具有更高的优先级.
来源: http://www.jianshu.com/p/ea4368767e42