面向对象--构造方法、重载和重写

来源:互联网 发布:oracle查找重复数据 编辑:程序博客网 时间:2024/04/17 03:40

构造方法

每个类都有构造方法。如果没有显式地为类定义构造方法,Java编译器将会为该类提供一个默认构造方法。
在创建一个对象的时候,至少要调用一个构造方法。构造方法的名称必须与类同名,一个类可以有多个构造方法。

需要注意的几个点:
1. 通过new关键字调用。
2. 构造器虽然有返回值,但是不能定义返回类型(返回的类型肯定是本类),不能再构造器里面调用return。
3. 如果我们没有定义构造器,那么编译器会自动提供一个默认的无参构造方法。

方法的重载

  • 方法重载是让类以统一的方式处理不同类型数据的一种手段。多个同名函数同时存在,具有不同的参数个数/类型,重载Overloading是一个类中多态性的一种表现。
  • Java的方法重载,就是在类中可以创建多个方法,它们具有相同的名字,但具有不同的参数和不同的定义。调用方法时通过传递给它们的不同参数个数和参数类型来决定具体使用哪个方法,
    这就是多态性。
  • 重载的时候,方法名要一样,但是参数类型和个数不一样,返回值类型可以相同也可以不相同。无法以返回型别作为重载函数的区分标准。
public class test{    int a;    int b;    public test(){    }    public test(int a){        this.a = a;    }    public test(int a,int b){        this.a = a;        this.b = b;    }    public static void main(String[] args){        //下面的这三个调用的分别对应上面的这几个构造方法,当然,如果类型不同的话,同样可以进行重载。        //test s = new test();        //test s = new test(1);        //test s = new test(1,2);    }}

当然特别提醒的一点,重载和重写是有着区别的:
重写:如何定义重写:在Java程序中,类的继承关系可以产生一个子类,子类继承父类,它具备了父类所有的特征,继承了父类所有的方法和变量。子类可以定义新的特征,当子类需要修改父类的一些方法进行扩展,增大功能,程序设计者常常把这样的一种操作方法称为重写,也叫称为覆写或覆盖。重写体现了Java优越性,重写是建立在继承关系上,它使语言结构更加丰富。在Java中的继承中,子类既可以隐藏和访问父类的方法,也可以覆盖继承父类的方法。在Java中覆盖继承父类的方法就是通过方法的重写来实现的。

所谓方法的重写是指子类中的方法与父类中继承的方法有完全相同的返回值类型、方法名、参数个数以及参数类型。这样,就可以实现对父类方法的覆盖。例如:下面的代码实现了方法的重写。

class Person{   //定义父类    public void print(){    //父类中的方法        System.out.println("父类Person的print方法!");    }}class Student extends Person{   //定义子类继承Person类    public void print(){    //方法的重写        System.out.println("子类Student的print方法!" );    }}public class 0verrideExampleO1{    public static void main(String args[]){        Student s=new Student();        S.print();    }}

运行的结果为:

子类Student的print方法!

可以看出,当子类重写了父类中的print()方法后,使用S调用的是子类的print()方法,父类中的print()方法被覆盖了。也就是说,如果现在子类将父类中的方法重写了,调用的时候肯定是调用被重写过的方法,那么如果现在一定要调用父类中的方法该怎么办呢?此时,通过使用.. super关键就可以实现这个功能,super关键字可以从子类访问父类中的内容,如果要访问被重写过的方法,使用“super.方法名(参数列表)”的形式调用。

Class Person{    public void print () {        System.out.println("父类Person的print方法!");    }}class Student extends Person{    public void print () {        super.print();  //访问父类中被子类覆写过的方法        System.out.println(" 子类Student的print方法!" );    }}public class OverrideExample02{    public static void main(String args[]){        Student s=new Student();        S.print();    }}/*运行结果:父类Person的print方法!        子类Student的print方法 !  */
阅读全文
0 0