在学习编程语言的时候我们经常会听到这样的话。C是一门面向过程的语言。C++是在C语言的基础上进行扩充和完善发展而来的,它兼容了C语言的面向过程特点,又成为了一种面向对象的程序设计语言。而JAVA是一门完全面向对象的语言。因此对于学过C++想转战JAVA的同学,首先就得弄清面向对象这个概念。相关文章:
由前一篇文章,我们已经初步知道了JAVA中对象的概念。接下来,再补充几点关于类和对象的概念理解,包括构造方法、方法重载以及this关键字。
一、构造方法。
(一)定义格式
访问修饰符 构造方法名(数据类型 参数名){
//具体内容
}
在定义构造方法时需要注意以下几点:
- 构造方法名必须要和类名完全一致,包括大小写;
- 构造方法不能定义返回值类型;
- JAVA会给类提供一个五参数的构造方法,如果你自定义了构造方法,则默认的构造方法将会被覆盖无法再继续使用,只能使用自定义的构造方法。
(二)作用
- 实例化对象:类名 对象名 = new构造方法名(参数值...);
- 给属性设置初始值
(三)构造方法和普通方法的区别
- 构造方法不能定义返回值类型,而普通方法一定要定义返回值类型;
- 构造方法名必须要和类名完全一致,而普通方法名可以任意(但不能是关键字);
- 构造方法用来实例化对象和给属性设置初始值,而普通方法是表示对象的行为(功能/用途);
- 构造方法每使用一次一定会实例化一个新对象,而普通方法则不会去实例化对象。
二、方法重载
方法重载,简单的说就是对于同一个方法名,有两种以上不同的实现。具体又可以分为普通方法重载和构造方法重载。
(一)普通方法重载
现实生活中人都有吃饭的行为,但是吃的东西在不同的时间和不同的地点可以不同,包括数量和顺序。比如早餐我们只需要面包和豆浆。但是午餐时我们需要米饭、汤、菜甚至筷子和碗。也就是说对于吃饭这个方法,我们在不同的时候参数的数量的数据类型都可能不一样。
(二)构造方法重载
现实生活中学生可以是一个类,但是大学生需要考四六级,而小学生并不需要。这时我们在使用构造方法实例化对象的时候就必须根据不同的人群使用不同的构造方法。
从上面的例子中我们可以总结出方法重载需要满足的条件。
- 方法的参数要不同(类型、个数或者顺序);
- 方法名要完全一致;
我们在实例化对象时,程序就会根据调用方式所给的参数来调用相应的构造方法。
三、this关键字
this关键字在不同的情况下所指的对象是不一样的。具体的说就是当前谁在调用方法,这个方法中的this就表示谁。假设a对象在调用方法,那么方法中的this就表示a对象。那为什么我们需要this关键字呢?来看下面一个例子。
我们先构造一个Man类
接着再构造一个主函数来调用它
我们原本是想把M对象的name属性设置为“Alex”这个值的,我们来看一下运行结果
我们会发现“Alex”这个值并没有被传进去,为什么呢?这里就涉及到JAVA的一个机制:当构造方法的参数名和属性名完全一致时,Java会采用就近原则,优先使用参数,把参数赋给参数,和属性没有任何关系。而解决这个问题就需要我们用到this关键字了。在属性就在前面加上"this.",这就表示对象的name属性了。修改代码,重新运行
查看运行结果,我们发现对象的属性被成功设置好了。
除此之外,this还有其他的使用方法。比如:this(参数值)可以表示调用构造方法,当然构造方法要预先定义。看下面的例子
查看运行结果,我们会发现程序先是调用了无参数的构造方法,再通过this调用了带参数的构造方法。
这里有一点要注意的是this()这个构造方法必须在函数内是第一行,否则会报错,有兴趣的同学可以自己去试看看。
至此我们已经把JAVA中面向对象的基础概念分析得差不多了。