重载
1.重载的概念:
在同一个类中,允许存在一个以上的同名方法,只要它们的参数个数或者参数类型不同即可。
总结:
“两同一不同” 类名,方法名相同;形参列表不同(形参个数不同,形参类型不同)
2.JDK5.0新特性:可变个数形参
格式:数据类型…参数
1.可变个数形参的格式 数据类型…变量名
2.当调用可变个数的参数的方法时,传入的参数个数可以是0个,1个,2个…多个。
3.可变个数形参的方法与本类中方法名相同,形参不同的方法类中构成重载。
public void show(String s){
}
public void show(String ...strings){
System.out.println("show String...");
}
4.可变个数形参的方法与本类中的方法名相同,形参类型相同的数组之间不构成重载,换句话说,二者不能共存。
//4.以下这两个并没有区别,
public void show(String ...strings)
{
System.out.println("show String...");
}
/*public void show(String[] str) 与上一个不共存,5.0以前可变类型参数用此方法定义
{
}
*/
5.可变个数形参在方法的形参中必须声明在末尾。
public void show(int i,String ...strings)
{
}
/*
public void show(String ...strings,int i) 可变个数参数必须放在形参列表末尾
{
}
*/
6.可变个数形参的方法的形参,最多只能声明一个可变形参。
重写
一.重写:
子类继承服父类以后,可以对父类中同名参数的方法,进行覆盖操作
二.应用:
重写以后,当创建子类对象以后,通过子类对象调用子父类中的同名参数的方法时,实际上执行的是子类重写父类的方法。
三.重写的规定:
方法的声明:权限修饰符 返回值类型 方法名(形参列表) throws 异常类型{
//方法体
}
约定俗称:子类中的叫重写的方法,父类中的叫被重写的方法
1.子类重写父类的方法名和形参列表与父类被重写的方法的方法名和形参列表相同
2.子类重写的方法的权限修饰符不小于父类被重写的方法的权限修饰符。
class Person{
void eat(){
}
/*
public void eat(){
}
*/
}
class Student extends Person{
public void eat(){ //子类的权限修饰符必须大于或等于父类的权限修饰符
}
}
>特殊情况,子类中不能重写父类中声明为private权限的方法
class Person{
private void show(){
}
}
class Student extends Person{
public void show(){
//此方法并不是重写了父类中的show方法
}
}
3.返回值类型:
3.1:父类被重写的方法的返回值类型是void,则子类重写的方法的返回值类型只能是void。
3.2:父类被重写的方法的返回值类型是A类型,则子类重写的方法的返回值类型可以是A类或A类的子类。
3.3:父类被重写的方法值类型是基本数据类型(如:double),则子类重写的方法的返回值类型必须是相同的基本数据类型(必须也是double)
class Person{
public Object info(){
return null;
}
}
class Student extends Person{
public String info(){ //此处也构成重写
return null;
}
}
4.子类重写的方法抛出的异常类型不大于父类被重写的方法抛出的异常类型
5.子类和父类中的同名同参数的方法要么都声明为非static的(考虑重写),要么都声明为static的(不是重写)