重写 订阅
在C#中,子类可继承父类中的方法,而不需要重新编写相同的方法。但有时子类并不想原封不动地继承父类的方法,而是想作一定的修改,这就需要采用方法的重写。方法重写又称方法覆盖。 展开全文
在C#中,子类可继承父类中的方法,而不需要重新编写相同的方法。但有时子类并不想原封不动地继承父类的方法,而是想作一定的修改,这就需要采用方法的重写。方法重写又称方法覆盖。
信息
实现方法
调用和执行
常用对象
派生类继承基类
中文名
重写
外文名
Override
重写实现方法
通常,派生类继承基类的方法,因此,在调用对象继承方法的时候,调用和执行的是基类的实现.但是,有时需要对派生类中的继承方法有不同的实现.例如,假设动物类存在"跑"的方法,从中派生出马和狗,马和狗的跑得形态是各不相同的,因此同样方法需要两种不同的实现,这就需要"重新编写"基类中的方法。"重写"基类方法就是修改它的实现或者说在派生类中重新编写。
收起全文
精华内容
下载资源
问答
  • 重写

    2013-06-19 20:39:23
    一:子类中重写父类中的方法 new方法: 在继承父类时相同的方法可能有不同的表现形式,比如说talk(),父类中:class mammal{public talk(){}} 子类中:class horse:mammal{new public talk(){}}//使用new关键字...

    一:子类中重写父类中的方法

    new方法:
    在继承父类时相同的方法可能有不同的表现形式,比如说talk(),父类中:class mammal{public talk(){}}
    子类中:class horse:mammal{new public talk(){}}//使用new关键字重写父类中talk()方法,将父类中的talk()隐藏;
    所以在实例化时:horse bighorse=new horse();bighorse.talk调用的是子类中重写的talk()方法;
    二:抽象类:

    public abstrct class computer
    1:抽象类不能被实例化;
    2:任何一个可以被实例化的类都有构造函数;
    3:那抽象类有构造函数吗?抽象有构造函数;
    4:那么抽象类有构造又不能被实例化(本身不能),它的子类(可以是抽象类也可以是普通类)就可以被实例化;
    5:一个方法是抽象的方法,这个方法就不应该有方法体(没大括号);
    6:在抽象方法在子类中可以重写方法体实现代码override;
    7:抽象方法不能定义到非抽象类中类中;
    8:实现抽象类就把抽象类中的抽象方法全部重写;

    三:虚方法

    public virtual string guanji()

    1:虚方法必须有方法体(与抽象方法的区别);
    2:虚方法可以定义到非抽象中(与抽象方法的区别);
    3:虚方法在子类中不一定都要重写(与抽象方法的区别);

     

    展开全文
  • 为什么重写equals一定要重写hashcode?

    万次阅读 多人点赞 2018-05-24 23:55:10
    Object类默认的equals比较规则就是比较两个对象的内存地址。而hashcode是本地方法,java的内存是安全的,因此无法根据散列码得到对象的内存地址,但实际上,hashcode是根据对象的内存地址经哈希算法得来的

    引言

    这篇文章已经是我很久之前写的,其中的内容表述得不太清楚,或多或少难以让人信服,于是我又写了一篇,链接如下:

    CSDN链接:重新认识equals和hashCode方法  微信公众号链接:深入理解equals和hashCode  希望点进去的小伙伴关注一下我的公众号哟,文末有二维码,谢谢!

     

    正文

     

    大家都知道,equals和hashcode是java.lang.Object类的两个重要的方法,在实际应用中常常需要重写这两个方法,但至于为什么重写这两个方法很多人都搞不明白,以下是我的一些个人理解。

    这是Object类关于这两个方法的源码,可以看出,Object类默认的equals比较规则就是比较两个对象的内存地址。而hashcode是本地方法,java的内存是安全的,因此无法根据散列码得到对象的内存地址,但实际上,hashcode是根据对象的内存地址经哈希算法得来的。

    上图展示了Student类的重写后的equals方法和hashcode方法,建议大家用eclipse自动生成,尽量不要自己敲因为很有可能会出错。

    现在有两个Student对象:

    •     Student s1=new Student("小明",18);
    •     Student s2=new Student("小明",18);

    此时s1.equals(s2)一定返回true

    • 假如只重写equals而不重写hashcode,那么Student类的hashcode方法就是Object默认的hashcode方法,由于默认的hashcode方法是根据对象的内存地址经哈希算法得来的,显然此时s1!=s2,故两者的hashcode不一定相等。
    • 然而重写了equals,且s1.equals(s2)返回true,根据hashcode的规则,两个对象相等其哈希值一定相等,所以矛盾就产生了,因此重写equals一定要重写hashcode,而且从Student类重写后的hashcode方法中可以看出,重写后返回的新的哈希值与Student的两个属性有关。

    以下是关于hashcode的一些规定:

    • 两个对象相等,hashcode一定相等
    • 两个对象不等,hashcode不一定不等
    • hashcode相等,两个对象不一定相等
    • hashcode不等,两个对象一定不等

     

    我的二维码

    觉得写得不错的小伙伴,扫码关注一下我的公众号吧,谢谢呀!

     

     

    展开全文
  • JAVA重写和重载的区别

    万次阅读 多人点赞 2018-07-11 22:04:05
    问: Java 重载与重写是什么?有什么区别? 答:  重载(Overload)是让类以统一的方式处理不同类型数据的一种手段,实质表现就是多个具有不同的参数个数或者类型的同名函数(返回值类型可随意,不能以返回...

    问: Java 重载与重写是什么?有什么区别?

    答:
      重载(Overload)是让类以统一的方式处理不同类型数据的一种手段,实质表现就是多个具有不同的参数个数或者类型的同名函数(返回值类型可随意,不能以返回类型作为重载函数的区分标准)同时存在于同一个类中,是一个类中多态性的一种表现(调用方法时通过传递不同参数个数和参数类型来决定具体使用哪个方法的多态性)。

    图1. Android类中的一个重载例子

    重写(Override)是父类与子类之间的多态性,实质是对父类的函数进行重新定义,如果在子类中定义某方法与其父类有相同的名称和参数则该方法被重写,不过子类函数的访问修饰权限不能小于父类的;若子类中的方法与父类中的某一方法具有相同的方法名、返回类型和参数表,则新方法将覆盖原有的方法,如需父类中原有的方法则可使用 super 关键字。

    图2. Android类中的常见的一个重写例子
    ----------

    **重载规则:**必须具有不同的参数列表; 可以有不同的返回类型;可以有不同的访问修饰符;可以抛出不同的异常。

    重写规则:参数列表必须完全与被重写的方法相同,否则不能称其为重写;返回类型必须一直与被重写的方法相同,否则不能称其为重写;访问修饰符的限制一定要大于等于被重写方法的访问修饰符;重写方法一定不能抛出新的检查异常或者比被重写方法申明更加宽泛的检查型异常,譬如父类方法声明了一个检查异常 IOException,在重写这个方法时就不能抛出 Exception,只能抛出 IOException 的子类异常,可以抛出非检查异常。

    重载与重写是 Java 多态性的不同表现。
      重写是父类与子类之间多态性的表现,在运行时起作用(动态多态性,譬如实现动态绑定)
      而重载是一个类中多态性的表现,在编译时起作用(静态多态性,譬如实现静态绑定)。


    问:Java 构造方法能否被重写和重载?

    答:
      重写是子类方法重写父类的方法,重写的方法名不变,而类的构造方法名必须与类名一致,假设父类的构造方法如果能够被子类重写则子类类名必须与父类类名一致才行,所以 Java 的构造方法不能被重写的。而重载是针对同一个的,所以构造方法可以被重载

    问:下面程序的运行结果是什么,为什么?

    public class Demo {
        
    public boolean equals( Demo other) {
            System.out.println("use Demo equals." );
            return true;    
    }
        
    public static void main(String[] args) {    
        Object o1 =new Demo ();
        Object o2 =new Demo ();        
        Demo o3 =new Demo ();
        Demo o4 =new Demo ();
    
       if (o1.equals(o2)) {
                System.out.println("o1 is equal with o2.");
            }
    
       if(o3.equals(o4)) {             
                System.out.println("o3 is equal with o4.");
            }
        }
    }
    

    答:上面程序的运行结果如下。

    use Demo equals.
    o3 is equal with o4.
    

    因为 Demo 类中的 public boolean equals(Demo other) 方法并没有重写 Object 类中的 public boolean equals(Object obj) 方法,原因是其违背了参数规则,其中一个是 Demo 类型而另一个是 Object 类型,因此这两个方法是重载关系(发生在编译时)而不是重写关系;故当调用 o1.equals(o2) 时,o2 是 Object 类型参数,实际上调用了 Object 类中的 public boolean equals(Object obj) 方法,因为在编译时 o1 和 o2 都是 Object 类型,而Object 类的 equals 方法是通过比较内存地址才返回 false;当调用 o3.equals(o4) 时,实际上调用了 Demo 类中的 equals(Demo other) 方法,因为在编译时 o3 和 o4 都是 Demo 类型的,所以才有上面的打印。

    展开全文
  • 什么是重写重写的作用?

    万次阅读 2017-02-13 10:38:58
    1、什么是重写? 个人理解:在子类中可以根据需要对从基类中继承来的方法进行重写重写是对类中方法的扩充,因为继承用的是父类的东西,重写则不仅得到父类的东西,同时也加入了自己的东西 官方理解:在Java和...

    一、什么是重写?

    1. 重写(Override)概念

    重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写!

    重写的好处在于子类可以根据需要,定义特定于自己的行为。 也就是说子类能够根据需要实现父类的方法。

    重写方法不能抛出新的检查异常或者比被重写方法申明更加宽泛的异常。例如: 父类的一个方法申明了一个检查异常 IOException,但是在重写这个方法的时候不能抛出 Exception 异常,因为 Exception 是 IOException 的父类,只能抛出 IOException 的子类异常。

    2. 个人理解:

    在子类中可以根据需要对从基类中继承来的方法进行重写,重写是对类中方法的扩充,因为继承用的是父类的东西,重写则不仅得到父类的东西,同时也加入了自己的东西

    3. 官方理解:

    在Java和其他一些高级面向对象的编程语言中,子类可继承父类中的方法,而不需要重新编写相同的方法。但有时子类并不想原封不动地继承父类的方法,而是想作一定的修改,这就需要采用方法的重写。方法重写又称方法覆盖若子类中的方法与父类中的某一方法具有相同的方法名、返回类型和参数表,则新方法将覆盖原有的方法。 如需父类中原有的方法,可使用super关键字,该关键字引用了当前类的父类。

    二、方法重写的一些特性:

    • 1.发生方法重写的两个方法返回值、方法名、参数列表必须完全一致(子类重写父类的方法)
    • 2.子类抛出的异常下不能超过父类相应方法抛出的异常(子类异常不能大于父类异常)
    • 3.子类方法的访问级别不能低于父类相应方法的访问级别(子类访问级别不能低于父类访问级别)

    根据2,3条可以确定第一条,子类重写父类方法的返回值类型不能大于父类方法的返回值类型,即是说子类方法的返回值必         须和父类方法的返回值相同或是其子类。

    • (1) 父类与子类之间的多态性,对父类的函数进行重新定义。即在子类中定义某方法与其父类有相同的名称和参数。
    • (2)若子类中的方法与父类中的某一方法具有相同的方法名、返回类型和参数表,则新方法将覆盖原有的方法。如需父类中        原有的方法,可使用super关键字,该关键字引用了当前类的父类。

    注意:方法重写与方法重载不同,方法的重载是方法的参数个数或种类或顺序不同,方法名相同。

    三、重写示例

    •  父类Animal
    package com.example.demo.entity;
    
    /**
     * @desc:  父类Animal
     * @author: cao_wencao
     * @date: 2020-11-19 10:07
     */
    public class Animal {
    
        public void move(){
            System.out.println("狗可以跑和走");
        }
    
    }
    • 子类Cat重写父类move()方法
    package com.example.demo.entity;
    
    /**
     * @desc:  子类Cat重写Animal的move()方法
     * @author: cao_wencao
     * @date: 2020-11-19 10:11
     */
    public class Cat extends Animal{
    
        public void move(){
            super.move();
            System.out.println("猫可以跳、可以吃小鱼");
        }
    }
    
    • TestAnimal

    package com.example.demo.entity;
    
    /**
     * @desc:
     * @author: cao_wencao
     * @date: 2020-11-19 10:13
     */
    public class TestAnimal {
        public static void main(String[] args) {
            Animal animal = new Animal(); // Animal 对象
            Animal cat = new Cat(); // Cat 对象
    
            //animal.move();// 执行 Animal 类的方法
    
            cat.move();//执行 Cat 类的方法
        }
    
    }
    

    结果如下:

    狗可以跑和走
    猫可以跳、可以吃小鱼
    

    四、重写的作用?

    重写是为了增强类的重用性和复用性,扩展性;

    重写是对类中方法的扩充,因为继承用的是父类的东西,重写则不仅得到父类的东西,同时也加入了自己的东西,两全其美。
     

    五、关于Java中重写ToString()方法的意义

       https://thinkingcao.blog.csdn.net/article/details/55045958

    展开全文
  • Nginx之八 URL重写(rewrite)配置

    万次阅读 2018-10-23 22:17:54
    Nginx URL重写(rewrite)配置及信息详解 1)if判断指令 语法为if(condition){...},对给定的条件condition进行判断。 如果为真,大括号内的rewrite指令将被执行,if条件(conditon)可以是如下任何内容: a: 当...
  • Java—重写与重载的区别

    万次阅读 多人点赞 2018-06-03 18:22:24
    Java—重写与重载的区别 这几周开始看Java的知识,发现有一个有趣的现象就是,前两天刚看过的知识点,过一天又忘掉了。而且很多东西堆在脑子里像浆糊一样。所以边学习边总结是很重要的,今天想写一篇关于重写和重载...
  • 方法重写

    千次阅读 2019-06-10 21:32:16
    7方法重写 子类可以重写从父类继承的方法,从而允许子类添加或者改变父类中方法的行为。这称为方法重写,是OOP的特征之一。 当子类重写父类的方法时,必须遵循如下的规则: 子类的方法的返回值的类型、方法名和...
  • 重写重载

    2017-09-04 17:01:30
    方法重写(@Override)的前提: 必须要存在继承的关系。方法的重写: 子父类有同名的函数,这个我们就称作为方法的重写。什么是时候要使用方法的重写:父类的功能无法满足子类的需求时。方法重写要注意的事项: 1....
  • 为什么重写equals同时要重写hashCode?

    千次阅读 热门讨论 2021-01-06 23:40:49
    重写equals不一定要重写hashCode,得看情况。如果在没使用容器时其实是没必要的。 如果使用了HashMap等容器,并且使用了自定义对象作为Key是一定要重写的。通过源码我们知道,只要hash码不一样的话就可以直接插入到...
  • 为什么重写equals就必须重写hashCode

    千次阅读 2019-09-01 15:20:52
    如果不被重写(原生Object)的hashCode和equals是什么样的? 不被重写(原生)的hashCode值是根据内存地址换算出来的一个值。 不被重写(原生)的equals方法是严格判断一个对象是否相等的方法(object1 == ...
  • url重写

    千次阅读 2018-05-16 08:39:55
    为了页面更有利于seo优化,url重写程序需要做出的不可缺少的手段之一。二.目前url重写最常见的两种方法有: 1.通过熟悉页面的内部执行流程,也就是asp.net请求管道中的相关知识点,进行url重写。 2.通过使用微软...
  • URL 重写

    千次阅读 2018-09-29 15:29:21
    URL重写,也属于会话追踪技术的一种. URL重写解决了这样一个问题:  当前浏览器把cookie禁用之后,浏览器在发请求的时候,就不会把cookie带到服务器端了(其中最重要的也包括JSESSIONID),因为禁用cookie之后浏览器拒绝...
  • 为什么重写equals还要重写hashcode?

    千次阅读 2019-05-18 21:05:04
    14、● 请你解释Object若不重写hashCode()的话,hashCode()如何计算出来的? 考点:基础 参考回答: Object 的 hashcode 方法是本地方法,也就是用 c 或 c++ 实现的,该方法直接返回对象的内存地址。 如果没有重写...
  • Java中重写

    千次阅读 2019-06-24 14:51:05
    在实际开发过程中,随着代码量的逐渐增加,维护成了一个很大的问题,如果需要对某个方法进行修改,其本身代码以及其子类代码都会受到影响,而重写则很好的解决了这个问题。方法重写又称为方法覆盖、方法复写。 方法...
  • Nginx地址重写以及url重写

    千次阅读 2018-09-07 09:31:29
    1、Nginx地址重写 [root@localhost html]# echo aaaaaaa > a.html [root@localhost html]# echo bbbbbb > b.html [root@localhost nginx]# vim /usr/local/nginx/conf/nginx.conf server { listen...
  • 系统函数的重写 __str__:在调用print打印对象的时候,会被自动调用,默认返回的对象的地址【给程序员使用的】 __repr__:在Python解释器中调用的方法【给计算机使用的】 #系统函数的重写 class Animal(object): ...
  • 为什么重写equals要重写hashcode?

    千次阅读 2019-04-15 21:38:46
    为什么重写equals要重写hashcode? 答:Note that it is generally necessary to override the {@code hashCode} method whenever this method is overridden, so as to maintain the general contract for the {@...
  • Swift的基类, 子类, 重写, 重写方法, 重写属性, 防止重写
  • 子类可以直接使用父类的属性和方法,如果父类的方法不能满足子类的需求,则可以在子类中对父类的方法进行重写(或覆盖)。 在方法重写时,如果子类需要引用父类中原有的方法,可以使用 super 关键字。当子类重写父类...
  • 为什么重写equals方法,还必须要重写hashcode方法

    万次阅读 多人点赞 2019-04-18 16:35:14
    是为了提高效率,采取重写hashcode方法,先进行hashcode比较,如果不同,那么就没必要在进行equals的比较了,这样就大大减少了equals比较的次数,这对比需要比较的数量很大的效率提高是很明显的,一个很好的例子就是...
  • 重写hashcode和equals方法

    万次阅读 多人点赞 2019-05-07 21:55:43
    一。前言 我们都知道,要比较两个对象是否相等时需要调用对象的equals()方法,即判断对象引用所指向的对象地址是否相等,对象地址相等...对象在不重写的情况下使用的是Object的equals方法和hashcode方法,从Object...
  • 重写hashcode和没有重写的区别

    千次阅读 2018-01-17 09:20:27
    重写hashcode和没有重写的区别 1.public boolean equals(Object obj),和hashcode()方法是object对象中的方法。 1.public boolean equals(Object obj),和hashcode()方法是object对象中的方法。 如果两个...
  • 所以我们要重写redisTemplate的序列化方式和cache的序列化方式 将redisTemplate的KeySerializer设置为new StringRedisSerializer()方式 而redisTemplate的ValueSerializer要设置为通用Jackson,通用Jackson反序列化...
  • 详解重写equals()方法就必须重写hashCode()方法的原因

    万次阅读 多人点赞 2017-02-25 10:04:08
    重写的作用: 如果重写(用于需求,比如建立一个Person类,比较相等我只比较其属性身份证相等就可不管其他属性,这时候重写)equals,就得重写hashCode,和其对象相等保持一致。如果不重写,那么一定保持一致。 1...
  • 重写与重载

    千次阅读 2019-07-03 13:56:37
    问题方案2.1 重写(Override)2.1.1 重要特征2.1.2 主要场景2.1.3 示例2.2 重载(Overload)2.2.1 重要特征2.2.2 常用场景2.2.3 示例 1. 问题描述 随着头越来越秃,会发现Java中重写与重载越来越重要,贯穿整个编程...
  • Nginx实现URL重写

    千次阅读 2019-01-14 00:30:51
    本文利用Nginx实现URL重写,本文使用Nginx与静态页面配合重写URL。 1.准备工作。 结合本文场景,需要安装Nginx。 1.1 关于Linux系统安装Nginx可以参考我的文章—(传送门)。 2.什么是URL重写? URL重写是指将一个...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 169,213
精华内容 67,685
关键字:

重写