重写:
1.发生在子父类之间
2.子类声明了和父类完全相同的方法,同方法名,同参数列表,同返回值
3.访问权限不能被缩小
4.异常不能被扩大
重载:
1.在同一个类中定义了多个同名的方法
2.参数列表不同(参数个数不同,参数类型不同,参数顺序不同(基于参数类型不同))
- 和返回类型无关。
请看关于父子类的例子:
class father
{
public void move(){
System.out.println("走");
}
}
class child extends father //child类继承father类
{
public void move(){ //方法重写要求参数签名必须一致,
System.out.println("跑") //方法重写,返回类型也必须相同,输出不同而已
}
public void move(String move) //方法重载,重载要求!参数!签名必须不一致,
{
System.out.println(move); //重载对返回类型不做限制。
}
}
什么是重写?
class A{
public void overWrite()
{
System.out.print("A")
}
}
public class B extends A
{
public void overWrite()
{
System.out.print("B")//输出和父类不一样
}
public static void main(String[] args)//主方法
{
A a=new B(); //重写父类的方法
a.overWrite();//重写父类的属性.
}
}
从上面可以看出:
重载和重写的区别
方法重写要求参数签名必须一致,而重载要求参数签名必须不一致。
方法重写要求返回类型必须一致,而重载对此不做限制。
方法重写只能用于子类重写父类的方法,必须有两个类子类和父类,重载可用于同一个类的所有方法。
给个小测试~
给定java代码如下所示,在A处新增下列( )方法,是对cal方法的
重载(选择两项)
public class Test{
public void cal(int x, int y, int z){
}
}
A. public int cal(int x,int y,float z){return 0;}
B. public int cal(int x,int y,int z){return 0;}
C. public void cal(int x,int z){}
D. public viod cal(int z,int y,int x){}
正确答案:AC
D. public viod cal(int z,int y,int x){}////重载要求参数签名必须不一致 ,哪怕换了位置也不行
B. public int cal(int x,int y,int z){return 0;}//重载要求参数签名必须不一致