类和对象
类:类是对对象的抽象,也就是说类是同一类对象的总称,这些对象具有相同的属性和方法。
对象:对象就是一个具体的事物,Java作为面向对象的语言,可以说在Java中万事万物皆对象。对象本身具有自己的属性和方法。
举个生活中的例子:我们生活中常见的人、手机、电脑、车、鸟等等就可以认为是类,然后每一个不同的人就是人这个类的对象,小米6,苹果7就是手机类的不同对象。
知道了什么是类,那么类里面有什么呢?
先来看一下类的定义方法:
public class 类名{ 访问修饰符 类型名 属性名 ; //构造方法 访问修饰符 构造方法名([数据类型 参数名]){} //普通方法 访问修饰符 返回值类型 方法名(数据类型 参数名.......){ } }
可以看到类是由属性(可以是变量也可以是常量)和方法组成;
类里面的方法可以分为构造方法和其他方法方法。
Java中的方法的类型有以下几种:普通方法、构造方法、静态方法(static修饰)、最终方法(fianl修饰)
构造方法
我们实例化一个对象时,通常使用的方式是这样的:类名 对象名=new 类名();
当然这里说这是类名其实并不是很准确,更准确的说这里new后面的应该是构造方法名。构造方法是一种特殊的方法,这种方法会在每次实例化对象的时候调用。
构造方法的定义是这样的:public 类名(参数类型 参数名......){ }
这里的构造方法需要注意的几个地方是:
1.如果类里面没有定义构造方法,我们一样可以新建对象,这种情况下JVM会为每个类提供一个默认的无参的构造的方法。这点要证明也很容易,在类里面在不写任何的构造方法是可以正常的实例化对象的,如果写了无参的构造方法JVM也不会报错。
2.如果自己在类里面定义了一个有参的构造方法,那么JVM就不会再为类提供默认的无参构造器了。这点可以自己在一个类中定义一个有参的构造方法,然后在实例化得时候调用无参的构造方法,这时可以看到JVM会报错。
3.构造方法的方法名必须和类名的相一致,而且构造方法是没有返回值类型的。
构造方法的作用:
1.实例化对象(new关键字只是在内存中开辟了一个空间,而构造方法则把类的属性和方法写入到堆内存中,然后返回这段内存的首地址)
2.给属性赋初始值
方法的重载
1.方法重载的条件:必须在同类或者是有继承关系的类中;方法重载时方法的方法名必须完全相同,然后方法的参数必须不同,返回值的类型可以相同也可以不同。
2.什么情况下需要用方法的重载呢?
普通方法的重载:可以想象生活中的这样的例子,比如学习或者工作累我们有放松的方法,但是每个人的放松的方法都不一样,比如:放松(旅游);放松(玩游戏);放松(睡觉)。
构造方法的重载:比如要生产两种手机,一种是键盘机,一种是触屏机,那么在新建对象的时候就可以调用不同的构造方法来实例化这两个不同的对象。
3.重载方法的调用:根据方法的参数来确定,参数不同就调用不同的方法。
这里有一个需要注意的地方就是重载和重写:
重载:在相同类或者有继承关系的类中,方法的方法名相同,参数不同,用于处理不同类型的数据。
重写(覆写,覆盖):在有继承关系的类中,方法的方法名,参数,返回值都必须和被覆写的方法一致。这时候新的方法就会覆盖继承的方法,所以叫方法的重写或者覆写。方法的重写主要是用以实现和父类不一样的功能。
this关键字
1、this关键字的用途:
在构造方法中,如果构造方法的参数名和类的属性名一致时,使用this关键字表示当前类的属性。如果不使用this关键字的话,Java会根据就进原则来给变量赋值,也就是把参数赋值给了参数,不会对类的属性产生任何的影响。
this还可以调用当前类的方法,如调用构造方法:this(参数列表),调用普通方法:this.方法名(参数列表);
2、this关键字的表示的是谁?
this关键字表示的当前的对象,当前正在调用方法的对象,就是thsi关键字表示的对象。
Person p1=new Person(); this.tell();//就是表示p1这个对象调用tell方法。 Person p2=new Person(); this.tell();//这时候表示的就是p2这个对象。