一.何为类?何为对象?
首先有句名言——万物皆为对象。这句话道出了Java的本质:面向对象。
那么什么是对象?
对象实际上就是生活中存在或者幻想出来的某一个具体事物,例如:一个茶杯,一瓶水,一只小狗等等。。。
对于一只小狗来说,它会有很多特征,例如:名字,品种,毛发颜色等等。。。
以上的名字等都是这只小狗的属性(特征)。然后小狗有各种各样的行为,比如说:吃东西,跑,跳等等。。。
这些都可以认为是这个小狗(对象)的行为。
基于以上的信息,我们在使用Java编程的时候可以抽象出一个小狗的类,这个类的一个实例就可以看作是一只小狗,而类内的
属性就是对象的属性,类内定义的的行为即为对象的行为的抽象。
举一个具体的例子:
//小狗的类
class dog{
String name;//名字
int age;//年龄
String variety;//品种
//小狗吃东西
public void eat(){
//eating......
}
}
dog a_puppy=new dog();//实例化了一个小狗对象
在这里,我们定义了一个小狗的类,并且实例化了一个小狗对象。
对于类可以这样理解:类是一个事物的抽象化,它没有具体的样子,他只是一个概念。
对于对象可以这样理解:对象是一个类的实例化,它是可以真实存在的,他是一个具体的事物。
二.类的格式与构造函数
Java类的格式如下:
访问修饰符 class 类名 (extends)父类名(implements)接口名{
//属性
访问修饰符 数据类型 属性名;
//构造函数
访问修饰符 类名(数据类型 参数名,...){
}
//普通方法
访问修饰符 返回值数据类型 方法名(数据类型 参数名,...){
}
}
先来讲解访问修饰符:
有接触过C++的人应该会很熟悉这个名词,访问修饰符实际上就是一种保护区,它是用来控制属性是否可以被访问的。
常用的访问修饰符有三种:private(私有)public(公有)protected(受保护的)。还有一种:default(默认的)
下面用一个表来说明访问修饰符的限制范围:
访问权限 类 包 子类 其他包
public ∨ ∨ ∨ ∨ (对任何人都是可用的)
protect ∨ ∨ ∨ × (继承的类可以访问以及和private一样的权限)
default ∨ ∨ × × (包访问权限,即在整个包内均可被访问)
private ∨ × × × (除类型创建者和类型的内部方法之外的任何人都不能访问的元素)
三.构造方法、方法重载和this指针
第一,任何一个类都会有构造方法。构造方法是在类被实例化为一个对象时调用的,其功能为初始化对象的属性以及
实例化对象。我用之前的例子来说明一下:
//小狗的类
class dog{
String name;//名字
int age;//年龄
String variety;//品种
//构造方法
public dog(String name,int a,String v){
this.name=name;
this.age=a;
this.variety=v;
}
//小狗吃东西
public void eat(){
//eating......
}
public void eat(String n){
//eating......
}
}
dog a_puppy=new dog("tom",1,"tiddy");//实例化了一个小狗对象
这里新增加了一个dog()的构造函数,可以看出来它做了一个初始化的作用,为实例化的dog对象赋予了name,age,variety的值。
第二,从上述的例子中可以看到有个变量this.name,这里的this就是this指针,那么this指针有什么作用呢?
其实很简单,就如同它字面的意思,指向这个对象。在每一个对象被实例化的时候都会生成一个只属于自己的this指针,它起的作用就是指代这个对象。所以就可以解释this.name是什么了,this是本对象,那么this.name就是本对象里的name属性。
那么什么时候会用到this呢?
一般来说,如果方法的参数名与类内属性名相同时,会用到this来确定哪一个是属性,哪一个是参数。
在这里补充一点,如果上例中的this.name=name;改为name=name;那么name会是参数,因为Java的编译原则是就近原则。name参数明显是要比name属性近。
第三,细心的同学会看到上例中有两个eat()函数,这里就要提到方法的重载了。什么是方法的重载呢?
如果有两个方法的方法名相同,但参数不一致,哪么可以说一个方法是另一个方法的重载。
例如上面的eat()方法,一个有参数,一个没有参数,这就是方法的重载。方法的重载有几个条件:
- 方法名必须相同
- 方法的参数类型,参数个必须不一样
- 方法的返回类型可以不相同
- 方法的修饰符可以不相同
- main 方法也可以被重载
到这里,Java类与对象的基本概念就讲完了,下面就是关于类的继承的讲解。