Java之旅_面向对象_重写和重载
参考并摘自:http://www.runoob.com/java/java-override-overload.html
重写(Override)
子类对父类(允许访问的)方法的实现过程进行重新编写,形参和返回值都不能变。即外壳不变,核心重写。
重写不能抛出比父类更宽泛的异常。
class Animal{
public void eat(int n){
System.out.println("Animal eat:"+n);
}
}
class Dog extends Animal{
public void eat(int m){
System.out.println("Dog eat:"+m);
}
}
public class Test{
public static void main(String[] args){
Animal animal = new Animal();
Animal dog = new Dog(); //注释行
animal.eat(10);
dog.eat(20);
}
}
运行结果:
Animal eat:10
Dog eat:20
上面注释一行尽管dog是Animal类型,但它运行的是Dog类的eat方法。
这是由于编译时,只检查参数的引用类型;运行时指定对象的类型并运行对象的方法 。
方法的重写规则:
1.参数列表和返回类型必须和被重写的相同
2.访问权限不能比父类更低
3.父类的成员方法只能被它的子类重写
4.声明为final方法不能被重写
5.声明为static方法不能被重写,但能够被再次声明
6.子类和父类在同一包中,则子类可以重写所有(除private和final)的方法
7.子类和父类不在同一包中,则子类可以重写声明为public和protected并且非final的方法
8.重写的方法可以抛出任何非强制异常,无论被重写的方法是否抛出异常。但是,重写的方法不能抛出新的强制性异常,
或者比被重写方法声明的更广泛的强制性异常,反之则可以。
9.构造方法不能被重写
10.如果不能继承一个方法,则不能重写这个方法
重载(Overload):
重载是在一个类里面,方法名相同而参数不同。
返回类型可以相同也可以不同。重载方法必须有一个独一无二的参数类型列表。
最常用的就是构造器的重载
重载规则:
1.必须改变参数列表(参数个数或类型或顺序不一样)
2.可以改变返回类型
3.可以改变访问修饰符
4.可以声明新的或更广的检查异常
5.方法能够在同一个类中或者在一个子类中被重载
public class Test{
public int test(){
System.out.println("test1");
return 1;
}
public void test(int a){
System.out.println("test2");
}
public void test(int a,String b){
System.out.println("test3");
}
public void test(String a,int b){
System.out.println("test4");
} public static void main(String[] args){
Test o = new Test();
o.test();
o.test(1);
o.test(1,"a");
o.test("a",1);
}
}
//运行结果:
test1
test2
test3
test4
总结:
重载和重写是java多态性的不同表现,方法重载是一个类的多态性表现,而方法重写是子类与父类的一种多态性表现。
最新文章
- Linq 单表城市级联
- ORB-SLAM(二)性能
- ES6详解
- oracle的基本数据类型(转载)
- ecilipse Javadoc文档注释
- activity theme parent 属性浅析
- Minimum Transport Cost(floyd+二维数组记录路径)
- STL—list
- 201521123075 《Java程序设计》第1周学习总结
- WordPress 实现附件上传自动重命名但不改变附件标题
- redis最全配置讲解
- Redhat中关于httpd仓库安装的简要步骤
- java的poi 读取exc 文件
- confluence上传文件附件预览乱码问题(linux服务器安装字体操作)
- js控制css时注意
- Transition学习笔记
- JS在if中的强制类型转换
- 如何用js创建表格?
- [代码]set容器查找操作使用
- 一、thinkphp
热门文章
- Android Gallery实现3D相册(附效果图+Demo源码)
- hdoj:2046
- Ogre2.1 Hlms与渲染流程
- QT Graphics-View 3D编程例子- 3D Model Viewer
- Java基础复习笔记基本排序算法
- js的 new Date()日期格式化显示以及js获取时间戳
- web.xml配置DispatcherServlet (***-servlert.xml)
- Android性能测试--内存
- javascript与java正则表达式写法的区别
- python中的细节