从自己稀稀拉拉的从图书馆里面借书看,再到真正的认识了面向对面这个神秘的东西,已经完全认识到这门课程,或者说这么语言的重要性。
面向对象,顾名思义,对象是重中之重,那么什么是对象?怎么去定义对象?怎么开始面向对象?
举个例子:我是一个学生,我在现实中是确确实实存在的,我就是一个对象,我属于学生这个类里面的,学生有各种,大学生,小学生,高中生。如果在代码中体现,并且我作为这个学生类里面的一个对象,需要去被使用的话,那么该怎么使用呢?
看如下代码:
Student stu = new Student();
new 是关键字,本条代码的意思就是,从Student这个类里面new了一个stu的对象,我们已经从类里面新建了一个stu的对象了,那么这个stu的对象就可以去参与我们即将要完成的任务,所谓的任务,就是已经写好了的方法。
既然提到了方法,什么是方法?学习必须要带着问题,去自己探索,自己研究。
方法,就是对象使用的方法,他是给对象来服务的,由类生对象,由对象,引申至方法。方法就是对象即将去做的事情,这里我们给上述的stu对象来创建他即将要实现,要做的一个study方法。
public void study(){
System.out.println("学习啦");
}
方法已经写好了,那么怎么去调用呢?格式是怎么样的呢?
我们已经有了一个stu对象了,那么要想让stu调用我们的study方法,有如下的代码格式,这是固定的,说不清的规则,有时候只能去遵守。
stu.study();
那么在控制台就会打印:学习啦
当多次调用这个方法的时候就会打出相对应次数的:学习啦
既然提到了方法,就不得不提一下在这个阶段,需要知道的内容:构造器
什么是构造器?构造器有什么用,他的代码格式,以及需要注意的东西有哪些呢?别急,我们慢慢来探讨。
首先,每个方法都有一个默认的无参构造器,这里,我们又接触了一个新的名词,无参,
即为没有参数。构造器就是构造方法,但是和一般的方法也有少许的差别。
默认的无参构造方法:
public Student(){
}
当然还有这样的构造方法:比如说,在构造方法的时候我们要初始化某些特定的值:
public Student(String name ){
this.name=name;
}
或者是这样:
public Student(String name ,int age){
this.name = name ;
this.age = age;
}
所以,当创建对象的时候,就可以在后面的括号中,传递对应方法中的几个值,也就赋予了对象的初始值;
Student stu2 = new Student(name,age);
构造器与一般的方法有什么区别呢?
严格的来讲,构造器不能算是方法,因为它里面可以传入参数,像 String name ,int age。构造器方法没有任何返回值的定义,且必须与类名相同。构造器方法只有在创建对象时调用,对于一个对象而言,他的构造器只能调用一次。注意:每个类都有一个默认的无参构造器,这个构造器在代码中不会体现出来,但是如果重新写了一个有参数的构造器,默认的无参构造器就不能被调用。
构造器讲完了,下面来说一下值传递与引用传递;
值传递:java中有八种基本数据类型,这些类型的数据在调用传递时蹲守”值传递“规则;
public class Student {
public void change(int t){
t=100;
}
}
public class Manager{
public static void main (String args[]){
Student stu1=new Student();
int i=1000;
stu1.change(i);
System.out.println("这里的i的值是"+i);
}
}
测试后的i的值为1000;
引用传递:首先要知道什么是引用;
前面我们已经根据Student 类创建了一个stu的对象,当我们说stu的时候就指向了一个学生的对象,但是这个学生的对象和这个stu是两个东西,我们不能说这个stu就是学生,也不能说学生就是stu,就是给了一个具体对象一个名字,叫stu,可以说stu 引用了学生这个对象;
那么就很容易理解引用传递这个概念了,就是一些带有名字的对象,相互之间进行渗透 ,进行相互赋值或者交换的时候,这个名字本身和这个对象发生了变化,对象存储在了这个名字所命名的空间当中,并且可以与其他同等条件下的其他对象进行的传递,就是引用传递;
下面再讲两个比较基础也是比较常用的问题:继承与接口
前面我们已经写好了一个Student类,这是一个学生的类,但是现在我们需要一个大学生类,大学生和学生有什么区别?大学生当然也是学生啦~大学生和学生都是需要学习的,但是不是所有的学生都要去考英语四级,大学生可以考,小学生就不可以,只是举个通俗易懂的例子,读者不要钻牛角尖,说什么天才少年5岁的时候英语就已经过了8级。。。。
那么我们这个大学生类,既要完成学生类里面学习的方法,又要考四级
那么这种情况就叫做继承,代码格式如下:
public class UNStudent extends Student{
}
既然还有考四级这件事情,这件事情是Student无法完成的 因为里面并没有考四级这个方法,所以就必须在我们的大学生UNStudent类里面重写Student方法,添加进去我们要考四级的方法,这就叫重写
由于继承和重写的机制,得到的结果可能不尽相同,这种情况叫做多态。
接口:
继承的机制,给了我们新的名词,也就是命名,UNStudent叫做子类,Student叫做父类,当子类中将要使用的方法在父类中无法提供的时候,就要在子类中重写父类的方法,这就需要定义接口,来声明,或者说是给定我们子类中的一些数据一些特定的属性和初始值;
接口的代码格式如下:
public interface NetJava{
public static final int age=20;
public static final int grade=3;
public static final String name ="Tom";
}
接口中没有任何实现的方法,所以接口是不能被创建对象的。
这段代码是错误的:
NetJava netj = new Netjava();
接口在使用中也是非常广泛的,一个好的接口可以省去一个程序员不少的麻烦。
既然上面提到了重写,下面就解释下重写,附加与重载的区别:
先看如下代码:
我们已经写了学生学习的方法:那么大学生学习的方法我们进行重写:
public class UNStudent extends Student{
public void study(){
String name = a;
int age=30;
System.out.println("学习的人的名字是"+name,“学习的年龄是”+“age”);
}
}
重载的代码如下:
public void study(String name,int age){
name = a;
age=30;
System.out.println("学习的人的名字是"+name,“学习的年龄是”+“age”);
}
public void study(int age,String name ,int hour){
System.out.println("重载方式1");
}
public void study(int age,int hour,String name){
System.out.println("重载方式2");
}
public void study(int hour){
System.out.println("重载方式3");
}
由上述代码可以看出,重写只是对已有属性的更改,重载而是对传递的参数的个数,顺序等进行更改,区别显而易见。
阶段性总结告一段落,笔者能力有限,理解程度也有限,还望多多指正批评。