码迷,mamicode.com
首页 > 其他好文 > 详细

重写( override)and 重载(overload)

时间:2017-06-27 15:05:03      阅读:164      评论:0      收藏:0      [点我收藏+]

标签:不同   cte   move   fast   抛出异常   return   main   string   不能   

重写override:是子类对父类的允许访问的方法的实现过程的重新编写,名字,返回值和形参都不能改变,即外壳不变,内心更改

重载overload:同一个类里面的方法,名字相同而参数不同,返回值可以相同也可以不相同。调用的时候根据传入的参数来匹配调用的方法。最常用的重载就是构造函数。

 

重写列子:

public class Animal {
String name;
int age;
//在父类里定义了一个方法move()
public void move(){
System.out.println("I can run");
}
}

public class Dog {
  //在子类里重写方法move(),更改实现过程
public void move(){
System.out.println("i am a dog, i can run very fast");
}

public static void main(String[] args){
Animal a = new Animal();
Dog b = new Dog();
a.move();
b.move();
}
}

运行结果

I can run
i am a dog, i can run very fast

重写的规则:

参数列表必须与被重写的方法相同

返回值类型必须相同

访问权限不能比父类中方法的权限低。如如果在父类中的访问权限是public,在子类中不能改写成protected

父类的成员方法只能被子类重写

声明为static的方法不能被重写,但是能被再次声明

子类和父类在同一个包中,子类可以重写父类的所有方法,除了private和final的方法

子类和父类不在同一个包中,子类只能重写父类中public和protected的非final方法

重写的方法能够抛出任何非强制异常,无论被重写的方法是否抛出异常。但是,重写的方法不能抛出新的强制性异常,或者比被重写方法声明的更广泛的强制性异常,反之则可以。

构造函数不能被重写

 

 

重载列子:对方法move()进行重载,传入不同的参数,可以有不同的返回值类型

public class Dog {
public void move(){
System.out.println("i am a dog, i can run very fast");
}
public String move(String name){
return name;
}

public int move(int i){
return i;
}


public static void main(String[] args){
Animal a = new Animal();
Dog b = new Dog();
a.move();
b.move();
}
}

重载的规则

每一个重载的方法或者构造函数都必须有不同的参数列表(类型,个数,顺序)

最常用的重载是构造函数

被重载的方法可以改变返回值,访问权限

被重载的方法可以声明新的或者更广的检查异常,但是不能声明更广的强制异常

方法可以在同一个类中或者子类中被重载

 

重写( override)and 重载(overload)

标签:不同   cte   move   fast   抛出异常   return   main   string   不能   

原文地址:http://www.cnblogs.com/xiaohai2003ly/p/7084845.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!