类与对象
首先,需要明白Java是一门完全面向对象的编程语言。
那么什么是面向对象?维基中文中是这样描述的:
面向对象程序设计(英语:Object-oriented programming,缩写:OOP)是种具有对象概念的程序编程典范,同时也是一种程序开发的抽象方针。它可能包含数据、属性、代码与方法。对象则指的是类的实例。它将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重用性、灵活性和扩展性,对象里的程序可以访问及经常修改对象相关连的数据。在面向对象程序编程里,计算机程序会被设计成彼此相关的对象。
对象
面向对象编程思想来源于现实生活,与我们日常表述和思考的方式很相似。面向对象编程就是使用面向对象编程思想设计的代码格式,从而做到对现实生活的模拟,也符合了我们的日常生活习惯。在现实生活中只要是一个具体的物体或者事物都是对象,比如说:具体的一个杯子,你自己。
在生活中,我们是怎么去描述对象的呢?以你喝水的被子为例,它就具有特征和功能。描述时,你就可以说它是怎么样的、它能够干嘛。
类
那么为什么会说需要是一个具体的事物才能叫作对象呢?杯子不能是对象呢?为什么不是呢?想到杯子,你的第一反应应该就是喝水用的,大概的样子,而不去管是具体的哪一个。也就是说,杯子于你而言,是一类具有相似特征和功能的事物,是抽象的。
程序中的类(Class)就定义了一件事物的抽象特点,它的定义包含了数据的形式以及对数据的操作:
- 属性 :根据对象的特征进行定义
- 方法 :
- 普通方法 :根据对象的功能(行为)进行定义
- 构造方法
java中类的格式如下:
public class 类名 {
//定义属性的格式
访问修饰符 数据类型 属性名;
//定义构造方法的格式
访问修饰符 构造方法名(数据类型 参数名,...){
}
//定义普通方法的格式
访问修饰符 返回值数据类型 方法名(数据类型 参数名,...){
}
}
Java中类是模板,是基本单位。
对象(Object)是类的实例。比如,你定义了狗这个类,我们无法让狗这个类去吠叫,但是我们可以让对象“小黑"去吠叫,正如狗可以吠叫,但没有具体的狗就无法吠叫。
所以我们需要实例化对象:
类名 对象名 = new 构造方法名(参数值....);
根据对象名调用属性和方法的格式:
对象名.属性名;
对象名.方法名(参数值,...);
构造方法
上文多次提到构造方法,那么什么是构造方法? 构造方法就是类中用来实例化对象
和初始化对象
的方法。
访问修饰符 构造方法名(数据类型 参数名,...){
}
值得注意的是:
- Java会给类提供一个无参数的构造方法,如果你自定义了则默认的构造方法会被覆盖无法使用,只能使用自定义的构造方法;
- 构造方法名必须和类名完全一致,包括大小写;
- 构造方法不能定义返回值数据类型。
它和普通的方法区别有:
- 返回值数据类型的定义不同;
- 方法名不同;
- 构造方法是用来实例化对象;普通方法表示的是对象的行为(功能、用途)。
- 每使用一次构造方法就会实例化一个新的对象;
重载
对于一个吃货,吃简直是必备技能,比如:吃(包子)、吃(米线、鸡腿),你可能注意到吃的个数不一样,对于方法而言,需要的参数就有区别,这个时候就会用到重载。
方法重载的条件包括:
- 方法名必须要完全一致,包括大小写;
- 方法所带的参数个数,参数类型,参数顺序至少要有一个不同;
- 同一个类中可以进行方法重载;有继承关系的子类和父类中也可以进行方法重载。
调用时,会根据给定的参数判断具体执行哪个方法。构造方法也可以重载,上面说过,构造方法是用来实例化对象,当同类包含有不同属性个数的对象时,就需要用到重载了,比如:有线鼠标和无线鼠标。
this
程序中常会出现属性名和参数名相同的情况,这种情况下,Java会采取就近原则
,表示的就是参数,如果我们想访问到属性就需要用到this,this相当于你我他这类代词
,表示的就是当前调用方法的对象
。
具体使用方法和意义如下:
//表示调用对象的属性
this.属性名;
//表示调用对应参数的构造方法。
this(参数值,...);
//表示调用普通方法
this.方法名(参数值,...);
看了这么多,先喝点橙汁吧。