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