JAVA继承时方法的重载(overload)与重写/覆写(override)

重载-Override

函数的方法参数个数类型不一致,称为方法的重载。

从含义上说,只要求参数的个数或参数的类型不一致就说两个函数是重载函数,而至于返回值是否一样,没关系。同时,重载可以发生在同一个类中也可以发生在继承关系中。

class A
{ } class B extends A { public void fun(String data1) { System.out.println(data1); } public String fun(String data1, String data2) { System.out.println(data1 + "-->" + data2); return ""; } }

上面的代码说明了在同一个类中的方法重载。此外,如果我们把第一个函数移到A类中,也构成了重载关系。

class A

{

    public void fun(String data1)

    {

        System.out.println(data1);

    }

}

class B extends A

{

    public String fun(String data1, String data2)

    {

        System.out.println(data1 + "-->" + data2);

        return "";

    }

}

重写-Override

重写也被称为覆写。对一个方法的重写必须发生在具有继承关系的两个类中,即子类对父类方法的重写。它要求两个方法的参数个数类型以及返回值类型都必须一致,这样才称为方法重写。

class A

{

    public void fun(String data)

    {

        System.out.println(data);

    }

}

class B extends A

{

    public void fun(String data)

    {

        System.out.println("XXXX" + data);

    }

}

上面代码演示了子类对父类方法的覆写。可以看到两个函数的参数个数和类型以及返回值都是一致的。

同时子类对父类的方法覆写对权限有要求,子类方法的访问权限必须大于或等于父类方法的访问权限。也就是说如果父类方法的访问权限是default,那么子类必须是default或者public,如果父类方法是public访问权限,那么子类就只能是public访问权限了。然而,实际开发中,绝大多数的方法都是public访问权限,所以覆写方法也是public。

关于访问权限,还有一点需要注意的是,父类方法如果是private,根据JAVA的封装性原则,private是不让其它任何类访问的。那么,此时子类能否对父类的private方法进行覆写呢?

答案是否定的。

class A

{

    public void test()

    {

        fun();

    }

    private void fun()

    {

        System.out.println("父类的private fun()");

    }

}

class B extends A

{

    public void fun()

    {

        System.out.println("子类的public fun()");

    }

}

public class Hello

{

    public static void main(String[] args) throws Exception

    {

        B b = new B();

        b.test();

    }

}

此时运行结果是调用的父类的private fun()方法。

所以,此时对重载和覆写做一个总结:

比较项目

重载

覆写/重写

英文名

Overload

Override

函数签名

只要求函数的参数个数或类型不一致,对返回值没要求

函数的参数个数、类型、返回值都必须完全一样。

发生地方

同一个类或者具有继承关系的两个类中

只能发生在继承关系的两个类中

访问权限

没有限制

子类覆写方法的访问权限必须大于或等于父类的方法的访问权限

JAVA中继承时方法的重载(overload)与重写/覆写(override)的更多相关文章

  1. [转]Java中继承、多态、重载和重写介绍

    什么是多态?它的实现机制是什么呢?重载和重写的区别在那里?这就是这一次我们要回顾的四个十分重要的概念:继承.多态.重载和重写. 继承(inheritance) 简单的说,继承就是在一个现有类型的基础上 ...

  2. java 中继承,组合,重载,重写的实现原理 (转)

    我们知道,继承,组合,重载,重写是java语言的面向对象实现的基本特征. 那么在java内部,究竟是如何实现这些面对对象的基本特征的呢? 继承和组合是面向对象中代码复用的主要实现方式,他们可以达到类似 ...

  3. java基础学习总结——方法的重载(overload)

    一.方法的重载 方法名一样,但参数不一样,这就是重载(overload). 所谓的参数不一样,主要有两点:第一是参数的个数不一样,第二是参数的类型不一样.只要这两方面有其中的一方面不一样就可以构成方法 ...

  4. Java方法多态性——方法的重载Overload和重写Override

    方法的重写(Overriding)和重载(Overloading)是java多态性的不同表现,重写是父类与子类之间多态性的一种表现,重载可以理解成多态的具体表现形式. 重写(Override) 重写是 ...

  5. Java中继承时静态块,构造块,构造函数的执行顺序

    public class Father { static { System.out.println("Father静态块"); } { System.out.println(&qu ...

  6. java中继承thread类的其他类的start()方法与run()方法

    java中继承thread或者实现runnable接口的类必须重写run()方法. 如果其执行了start()方法,其实就是启动了线程的run()方法. 注意:如果是实现runnable接口的类是没有 ...

  7. 方法的覆盖(override)、重载(overload)和重写(overwrite)

    body { background-color: white } .markdown-body { min-width: 200px; max-width: 760px; margin: 0 auto ...

  8. C#类的继承,方法的重载和覆写

    在网易云课堂上看到唐大仕老师讲解的关于类的继承.方法的重载和覆写的一段代码,注释比较详细,在此记下以加深理解. 小总结: 1.类的继承:允许的实例化方式:Student t=new Student() ...

  9. Java中的native方法

    博客引用地址:Java中的native方法 今天花了两个小时把一份关于什么是Native Method的英文文章好好了读了一遍,以下是我依据原文的理解. 一. 什么是Native Method 简单地 ...

随机推荐

  1. swagger-editor 快速REST-API 测试文档编写

    1. 在线使用 http://editor.swagger.io/#/ 2. 离线工具 https://github.com/swagger-api/swagger-editor 3. 跨域访问问题: ...

  2. Nagios 监控

    配置文件说明 文件名或目录名 用途 cgi.cfg 控制CGI访问的配置文件 nagios.cfg Nagios 主配置文件 resource.cfg 变量定义文件,又称为资源文件,在些文件中定义变量 ...

  3. Kettle合并记录步骤

    转载: http://blog.itpub.net/post/37422/464323 该步骤用于将两个不同来源的数据合并,这两个来源的数据分别为旧数据和新数据,该步骤将旧数据和新数据按照指定的关键字 ...

  4. 导入和导出表空间:复制文件比mysqldump&restore快

    #生成测试数据server1:mysql> CREATE TABLE test (c1 INT PRIMARY KEY)engine = innodb;Query OK, 0 rows affe ...

  5. Request Session生命周期及struts1 中service的编写

    现在接手的项目是一个早期的struts1框架的项目.同时也是刚开始接触web 以及struts1架构. 在处理多个action时,有一个tab子页面需要每5s自动刷新一次. 然后在测试过程中发现,点击 ...

  6. 设计师必看的10个HTML5动画工具

    如果你想用令人难以置信的动画创建引人注目的网站的话,那么这里为设计师精心挑选了一些必备的HTML5动画工具.HTML5是设计师用来打造时尚网站的最流行的编程语言之一.在过去三年内,这种编程语言的使用人 ...

  7. 浅析:setsockopt()改善socket网络程序的健壮性

    1. 如果在已经处于 ESTABLISHED状态下的socket(一般由端口号和标志符区分)调用closesocket(一般不会立即关闭而经历TIME_WAIT的过程)后想继续重用该socket:BO ...

  8. 使用eclipse和maven创建activiti项目基础配置

    项目组最近的项目使用到了activiti工作流,到处查找了一些资料后,初步完成任务.但是我所做的事只是在搭好的环境中调用接口和方法操作,因此自己尝试着也从搭建环境入手,以下是成功实现以后的记录. 实现 ...

  9. mac 下使用wireshark监听网络上的数据

    分三个步骤:    1.wireshark安装        wireshark运行需要mac上安装X11,mac 10.8的系统上默认是没有X11的.先去http://xquartz.macosfo ...

  10. ServletContext(重要)

    一个项目只有一个ServletContext对象! 我们可以在N多个Servlet中来获取这个唯一的对象,使用它可以给多个Servlet传递数据! 这个对象在Tomcat启动时就创建,在Tomcat关 ...