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

    展开全文
  • Java:重写

    千次阅读 2018-09-05 11:05:34
    1.子类可以继承父类方法,但有时从父类继承的方法在子类中必须进行修改以适应新类的需要,这种对父类方法进行改写或改造的现象称为方法重写或方法覆盖。父类方法在子类中重写使继承更加灵活。 2.子类重写了父类的...

    1.子类可以继承父类方法,但有时从父类继承的方法在子类中必须进行修改以适应新类的需要,这种对父类方法进行改写或改造的现象称为方法重写或方法覆盖。父类方法在子类中重写使继承更加灵活。

    2.子类重写了父类的方法,则使用子类创建的对象调用该方法时,调用的是重写后的方法,即子类中的方法:

     

    Father.java文件中的代码 :

    Son.java文件中的代码 :

    程序运行结果:

     

    3.如果要在子类非static修饰的代码块或方法中调用父类被重写的方法可以通过super关键字实现

     

    4.@Override注解可以判断当前方法是否重写了父类的某个方法,如果在方法上加上该注解没有出错,则说明重写了父类方法,否则没有重写父类方法。

     

    5.子类重写父类方法需满足以下条件:

    ⑴方法名和参数列表:子类重写的方法和父类被重写的方法在方法名和参数列表方面相同;

    注:参数列表: 参数个数及其对应的参数类型相同

    ⑵返回值类型:

    ①如果父类被重写的方法没有返回值类型或者返回值类型为基本数据类型,则要求子类重写的方法的返回值类型和父类被重写方法的返回值类型相同;

    ②如果父类被重写的方法返回值类型为引用数据类型,则要求子类重写的方法的返回值类型和父类被重写方法的返回值类型相同或是其子类。

     

     Father.java文件中的代码:

     

    Son.java文件中的代码 :

     

     6.子类重写的方法不能缩小父类被重写方法的访问权限,子类重写方法的访问权限必须大于等于父类被重写方法的访问权限

     

    Father.java文件中的代码:

     

    Son.java文件中的代码 :

    注:欲重写父类中eat方法但由于此处访问权限为private而父类为public,所以出错了。

     

    7.父类中静态方法可以被子类继承,但却不能被子类重写;

     

    Father.java文件中的代码:

    注 :static修饰的方法。

     

    Son.java文件中的代码:

    注:欲重写父类中eat方法,但是由于父类中eat方法被static修饰,所以在子类中不能重写。 

     

    8.重写父类非静态方法时,重写后的方法不能添加static修饰

     

     Father.java文件中的代码:

     

     Son.java文件中的代码:

    注:向重写后的eat方法添加了static修饰后,程序报错 

     

    9.父类中被final关键字修饰的方法可以被子类继承,但却不能被子类重写。

     

    Father.java文件中的代码:

    注:final修饰的方法。

     

    Son.java文件中的代码:

    注:欲重写父类中eat方法,但是由于父类中eat方法被final修饰,所以在子类中不能重写。


     

     

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

    万次阅读 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

    展开全文
  • 重写(override)

    2019-02-10 19:29:39
    **方法的重写override** 子类通过重写父类的方法,可以用自身的行为替换父类的行为。方法的重写是实现多态的必要条件。 **方法重写需要符合下面的三个要点:** 1、“==”:方法名、形参列表相同; 2、“<...
    	**方法的重写override**
    	子类通过重写父类的方法,可以用自身的行为替换父类的行为。方法的重写是实现多态的必要条件。
    	**方法重写需要符合下面的三个要点:**
    	1、“==”:方法名、形参列表相同;
    	2、“<=":返回值类型和声明异常类型,子类小于等于父类。
    	3、“>=”:访问权限,子类大于等于父类。
    	
    	Object类是所有Java类的根基类,也就意味着所有的Java对象都拥有Object类的属性和方法。
    	如果在类的声明中未使用extends关键字指明其父类,则默认继承Object类。
    	
    	Object类中定义有public String toString()方法,其返回值是String类型。
    	Object类中toString方法的源码为:
    	public String toString(){
    		return getClass().getName()+"@"+Integer.toHexString(hashCode());
    	}
    	根据如上源码得知,默认会返回“类名+@+16进制的hashCode”。在打印输出或者用字符串连接对象时,
    	会自动调用该对象的toString()方法。
    
    	**==和equals方法**
    	“==”代表比较双方是否相同。如果是基本类型则表示值相等,如果是引用类型则表示地址相等,即是同一个对象。
    	Object类中定义有:public boolean equals(Object obj)方法,提供定义“对象内容相当”的逻辑。
    	比如,我们在公安系统中认为id相同的人就是同一个人,学籍系统中认为学号相同的人就是同一个人。
    	Object的equals方法默认就是比较两个对象的hashCode,是同一个对象的引用时返回true否则返回false。
    	但是,我们可以根据自己的需求重写equals方法
    	(快捷键alt+shift+s---->Generate hashCode() and equals()...)。
    	JDK提供的一些类,如String、Date、包装类等,重写了Object的equals方法,
    	调用这些类的equals()方法,x.equals(y),当x和y所引用的对象是同一类对象且属性内容相等时
    	(并不一定是相同对象),返回true,否则返回false。
    
    	**super关键字**
    	super是直接父类对象的引用。可以通过super来访问父类中被子类覆盖的方法或属性。
    	使用super调用普通方法,语句没有位置限制,可以在子类中随便调用。
    	若是构造方法的第一行代码没有显式的调用super(...)或者this(...);那么Java默认都会调用super(),含义是调用父类的无参数构造方法。这里的super()可以省略。
    
    	**继承树追溯**
    	属性/方法查找顺序:(比如:查找变量h)
    	1、查找当前类中有没有属性h;
    	2、依次上溯每个父类,查看每个父类中是否有h,直到Object。
    	3、如果没有找到,则出现编译错误。
    	4、上面步骤,只要找到h变量,则这个过程终止。
    	**构造方法调用顺序**
    	构造方法第一句总是:super(...)来调用父类对应的构造方法。所以,流程就是:先向上追溯到Object,
    	然后再依次向下执行类的初始化块和构造方法,直到当前子类为止。
    	注:静态初始化块调用顺序,与构造方法调用顺序一样。
    
    展开全文
  • 重写和重载

    千次阅读 2019-03-10 13:57:46
    重写(Overlode):子父类中,子类定义的和其从父类继承而来的方法中方法签名完全相同的方法。 注意:必须是从父类继承而来的方法。父类中的private方法,子类没有权限继承,因而重写不了。 参考文献 ...
  • 关于重写和重定义

    千次阅读 2018-05-22 16:12:16
    重写、重定义和继承完全是两个概念,比如析构函数:能被派生类重写,来实现多态,可以方便的用指向基类的指针释放派生类的对象,不能被继承,因为举个例子,派生类和基类有不同的成员,如果基类的默认析构函数是从...
  • 重写方法

    2020-07-22 08:48:22
    重写 //父类 public class B { public static void test(){ System.out.println("B==>test()"); } } //子类 public class A extends B{ public static void test(){ System.out.println("A==>test()")...
  • 重写

    2019-05-12 09:25:56
    文章目录重写1.为什么需要重写2.重写的定义3.调用父类被重写的方法4.子类重写父类方法需满足条件 重写 1.为什么需要重写 父类中的方法不适用于子类,子类可以继承父类的属性和方法,但是子类必须修改父类中某些方法...
  • 1、背景 在C++里有必要弄清楚他们三者的不同。 1.1 参考资料 ... 2、三者的不同详细 ...重载(overload):是函数名相同,参数列表不同,...重写(override),也叫覆盖。子类重新定义父类中有相同名称和参数的虚函数(virtua...
  • Java中重写

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

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

    万次阅读 多人点赞 2018-05-24 23:55:10
    大家都知道,equals和hashcode是java.lang.Object类的两个重要的方法,在实际应用中常常需要重写这两个方法,但至于为什么重写这两个方法很多人都搞不明白,以下是我的一些个人理解。 这是Object类关于这两个方法...
  • Nginx之八 URL重写(rewrite)配置

    万次阅读 2018-10-23 22:17:54
    Nginx URL重写(rewrite)配置及信息详解 1)if判断指令 语法为if(condition){...},对给定的条件condition进行判断。 如果为真,大括号内的rewrite指令将被执行,if条件(conditon)可以是如下任何内容: a: 当...
  • 今天这篇文章我们打算来深度解读一下equal方法以及其关联方法hashCode(),我们准备从以下几点入手分析: 1.equals()的所属以及内部原理(即Object中equals方法的实现原理) 说起equals方法,我们都知道是超类...
  • Java方法重写与重载的区别

    万次阅读 多人点赞 2018-08-23 10:26:39
    Java方法重写与重载 一、方法重写(0veriding) 在Java程序中,类的继承关系可以产生一个子类,子类继承父类,它具备了父类所有的特征,继承了父类所有的方法和变量。 子类可以定义新的特征,当子类需要修改父类...
  • 重写hashcode和equals方法

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

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

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

    千次阅读 2019-02-15 17:31:22
    dd ddd
  • Nginx URL重写(rewrite)介绍  和apache等web服务软件一样,rewrite的组要功能是实现RUL地址的重定向。Nginx的rewrite功能需要PCRE软件的支持,即通过perl兼容正则表达式语句进行规则匹配的。默认参数编译nginx就...

空空如也

1 2 3 4 5 ... 20
收藏数 1,106,761
精华内容 442,704
关键字:

重写