参考并摘自: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多态性的不同表现,方法重载是一个类的多态性表现,而方法重写是子类与父类的一种多态性表现。

Java之旅_面向对象_重写和重载的更多相关文章

  1. Java之旅_面向对象_抽象类

    参考并摘自:http://www.runoob.com/java/java-abstraction.html Java抽象类: 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有 ...

  2. Java之旅_面向对象_封装

    参考并摘自:http://www.runoob.com/java/java-encapsulation.html 在面向对象的程序设计方法中,封装(英语 :Encapsulation)是指一种将函数接 ...

  3. Java入门 - 面向对象 - 02.重写与重载

    原文地址:http://www.work100.net/training/java-override-overload.html 更多教程:光束云 - 免费课程 重写与重载 序号 文内章节 视频 1 ...

  4. Java基础(七):重写与重载

    一.重写(Override): 重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变.即外壳不变,核心重写! 重写的好处在于子类可以根据需要,定义特定于自己的行为. 也就是 ...

  5. Java之旅_面向对象_多态

    参考并摘自:http://www.runoob.com/java/java-polymorphism.html 多态 多态是一个行为具有多个不同表现形式的能力. 多态就是同一个接口,使用不同的实例而执 ...

  6. Java之旅_面向对象_包(Package)

    http://www.runoob.com/java/java-package.html 包的作用: 1.把功能相似或相关的类或接口组织在同一个包中,方便类的查找和使用. 2.如同文件夹一样,包也采用 ...

  7. Java之旅_面向对象_接口

    参考摘自:http://www.runoob.com/java/java-interfaces.html 接口(interface)在Java中是一个抽象类型,是抽象方法的集合. 一个类通过imple ...

  8. java语言基础(四)_面向对象_类_对象_封装_构造

    面向对象 Java语言是一种面向对象的程序设计语言,而面向对象思想是一种程序设计思想,我们在面向对象思想的指引下,使用Java语言去设计.开发计算机程序. 这里的对象泛指现实中一切事物,每种事物都具备 ...

  9. Python-老男孩-02_装饰器_面向对象_封装_继承_异常_接口_数据库

    装饰器其实也是一个函数,它的参数是一个函数 ; 其它函数与装饰器之间建立联系是通过 @装饰器函数名, 感觉有点像Spring的面向切面编程 装饰器函数,如何处理原函数的参数.?  装饰器 原函数返回值 ...

随机推荐

  1. python 中的map,dict,lambda,reduce,filter

    1.map(function,sequence) 对sequence 中的item依次执行function(item), 见执行结果组成一个List返回 例如: #!/usr/bin/python # ...

  2. SQL 中的LastIndexOf,截取最后一次出现字符后面的字符(转)

    SQL如何取出一个字符串中最后一个特殊字符右边的字符,例如:10*20*300,怎样得到300? 使用reverse配合charindex来实现. reverse是把字符串倒置,然后通过charind ...

  3. 【emWin】例程十九:窗口对象——Checkbox

    简介: 复选框是选择各种不同选项的最常用小工具之一.用户可选中或取消选中复选框,并且可一次选中任意个框 触摸校准(上电可选择是否进入校准界面) CHECKBOX三状态模式 CHECKBOX设置字体颜色 ...

  4. mac中安装wxpython

    一.简介 wxPython是Python语言的一套优秀的GUI图形库,允许Python程序员很方便的创建完整的.功能键全的GUI用户界面. wxPython是作为优秀的跨平台GUI库wxWidgets ...

  5. PE病毒初探——向exe注入代码

    PE文件其实就是Windows可执行文件,关于它的一些简要介绍摘自百度: PE文件被称为可移植的执行体是Portable Execute的全称,常见的EXE.DLL.OCX.SYS.COM都是PE文件 ...

  6. Java知多少(2)虚拟机(JVM)以及跨平台原理

    相信大家已经了解到Java具有跨平台的特性,可以“一次编译,到处运行”,在Windows下编写的程序,无需任何修改就可以在Linux下运行,这是C和C++很难做到的. 那么,跨平台是怎样实现的呢?这就 ...

  7. [Laravel] 12 - WEB API : cache implement

    前言 Ref: https://www.imooc.com/video/2873 服务端如何为客户端(app)的首页提供数据接口, 本篇用此作为例子演示接口的实现. 单例模式 一.三大原则 单例实现 ...

  8. dokcer使用--link 让容器相连

    在使用Docker的时候我们会常常碰到这么一种应用,就是我需要两个或多个容器,其中某些容器需要使用另外一些容器提供的服务.比如这么一种情况:我们需要一个容器来提供MySQL的数据库服务,而另外两个容器 ...

  9. Android打印当前所有线程及对应栈信息

    Map<Thread, StackTraceElement[]> threadMap = Thread.getAllStackTraces(); Log.e("albertThr ...

  10. nginx的80端口跳转到443

    然后在80端口设置http跳转到https 在80端口location中加入rewrite ^(.*)$ https://$host$1 permanent; 如图,然后输入命令service ngi ...