您的位置:首页 > 编程语言 > Java开发

Java重载,继承,覆盖

2017-04-11 16:37 113 查看
一,重载

重载含义

对一个方法多次定义,即方法名相同,输入参数不同;

输入参数不同:参数数量不同/参数类型不同/参数次序不同(次序不同前提是有不同的数据类型,不然次序无意义);

重载对所有的成员方法都适用(包括构造方法,但不包括finalize方法);

重载使用技巧

当重载一个构造方法时,首先要提供一个尽可能普通的版本(输入参数最全面的版本),其他版本可使用this(参数)方式调用该版本的构造方法,取代默认的参数;

如果在其他构造方法中调用普通版的构造方法,这个调用语句必须作为这个方法的第一条语句;

例如:

public Student(String _name, double _GPA){    //最普通版本构造方法--有name,有GPA
name=_name;
GPA=_GPA;
}
public Student(){                     //this(参数)调用版--无name,无GPA
this("nobody",     -1.0);
}
public Student(String _name){            //this(参数)调用版--有name,无GPA
this(_name,-1.0);
}
public Student(double _GPA){             //this(参数)调用版--无name,有GPA
this("nobody",_GPA);
}


二,继承

继承说明

在子类的构造方法的第一行,可以使用super(参数)来引用父类的构造函数;

当一个类被实例化时,它的构造方法自动被调用,当一个子类被实例化的时候,虽然没有加入任何调用构造函数的语句,但子类的构造方法和超类的构造方法都被自动的调用;

当子类被调用的时候,要隐含地调用超类的构造方法,这种情况下,没有为构造方法输入任何参数;如果超类没有无参数的构造方法,子类又不明确的调用超类的构造方法,则编译器将无法编译子类;

除了隐含调用父类构造函数,也可以在子类的第一行明确的调用超类的构造方法;

假如某个类含有finalize方法,而另一个自带finalize方法的类扩展了它,当子类的finalize方法结束后,将自动地调用超类的finalize方法;

继承使用技巧

由于子类在不明确指明的情况下,会隐含调用父类的构造方法,而且该调用不带输入参数,所以当父类中并没有无输入参数的构造方法时,则子类的隐含调用就会出现编译错误;对此,常有如下两种使用继承的技巧:

第一种(不使用隐含调用,直接第一句明确调用):每个子类都应当明确地调用超类的一个构造方法,而且必须在第一行调用,当然前提是该调用必须保证超类中有对应的构造方法;

第二种(使用隐含调用,但父类要提供无参构造方法):为每个可能成为超类的类提供一个无参构造方法,如果还有其他需要,则重载构造方法;

三,覆盖

覆盖含义

子类对父类成员方法或成员变量重新定义,覆盖原来的定义;

如果重定义的方法的参数列表与超类中该方法的参数列表不一致,叫做重载,而不叫覆盖;即参数列表必须与超类的一致;

覆盖成员方法和成员变量都可以在子类中通过super和圆点操作符来实现;

覆盖基本规则

覆盖方法的返回类型必须同它所覆盖的方法相同;

覆盖方法不能比它覆盖的方法的访问性差;

覆盖方法不能比它所覆盖的方法抛出更多的异常;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 继承 覆盖 重载