1-9方法的重写(override)

什么是重写?

重写,也叫做覆盖,当父类中的方法无法满足子类需求时,子类可以将父类的方法进行重写编写来满足需求。比如孩子继承了父亲的房子,可以将房子重新装修。
方法重写的条件:

  • 两个类必须是继承关系
  • 必须具有相同的方法名,相同的返回值类型,相同的参数列表.
  • 重写的方法不能比被重写的方法拥有更低的访问权限。
  • 重写的方法不能比被重写的方法抛出更宽泛的异常。(关于异常后面的章节再讲。)
  • 私有的方法不能被重写。
  • 构造方法无法被重写,因为构造方法无法被继承。
  • 静态的方法不存在重写。
  • 重写指的是成员方法,和成员变量无关。
    先定义一个动物类
class Animal {

    public void eat() {
        System.out.println("吃饭");
    }

    public void sleep() {
        System.out.println("睡觉");
    }
}
定义一个Cat类继承Animal

class Cat extends Animal {

    public void eat() {
        System.out.println("吃猫粮");//猫喜欢吃猫粮
    }
}

定义一个Dog类继承Animal

class Dog extends Animal {

    public void eat() {
        System.out.println("吃狗粮");//狗喜欢吃狗粮
    }
}

Animal测试类

public class AnimalTest01 {
    public static void main(String[] args) {
        Cat c = new Cat();
        c.eat();

        Dog d = new Dog();
        d.eat();
    }
}

上代码中的Cat类和Dog类在调用父类Animal中的eat方法时已经不能很好的满足自身的需求了,所以都将eat类进行了重写。

静态的方法不存在重写

public class Test01{

    public static void main(String[] args){

        A.m1();
        B.m1();
    }
}

class A{

    //静态方法
    public static void m1(){
        System.out.println("A中静态方法m1");
    }
}

class B extends A{

    //尝试重写父类的静态方法
    public static void m1(){
        System.out.println("B中静态方法m1");
    }
}

原文地址:https://www.cnblogs.com/superfly123/p/10442847.html

时间: 2024-11-07 21:28:15

1-9方法的重写(override)的相关文章

方法的重写override,重载overload。

方法的重写,是子类继承父类的方法,但是子类根据自己的要求重新写的新方法比如Object 类中toString()方法, 如果在mian函数中直接system.out.print(  对象  ),那么会出现类似以下的代码: public class Student { private int age; private String name; public Student() { } public Student(int age,String name) { this.age=age; this.

多态,虚拟方法,重写,接口,类库,委托,is,as运算符,泛型集合,万能变量

多态:简而言之就是龙生九子,各有不同 有了继承,才有了多态 1.虚方法 virtual重写 override 父类中的方法,在子类中并不适用,那么子类需要自主更改继承的方法或者是属性,那父类中加了virtual关键字的方法才可以被子类重写 子类重写父类的方法使用的是override关键字 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace 多态 { publ

c# 中面相对性的三个特点:封装,继承,多态, 以及c#中隐藏(new)和方法重写(override)和重载(overload)的区别

封装 1)封装原则:将不需要对外提供的内容都隐藏起来,把属性都隐藏,提供公共方法对其访问,通常有两种访问方式:set 设置,get 获取. 2)封装结果:存在但是不可见. 3) 访问修饰符 声明的可访问性                                 含义 public                                    访问不受限制. protected                              访问仅限于本类或者其子类(可以跨程序集). p

C#基础-方法的重写(new)和覆盖(override)

最近又再看基础知识了. 看到方法的重写(new)和覆盖(override)的时候有点不太懂. 于是百度之. 那答案啊..... 要么就是把覆盖(override)和重载(overlord)混淆了. 要么就是把重写(new)和覆盖(override)说反了. 最后不得已谷歌之. 在stackoverflow里看到一个比较好的答案: ------------------------------------------------------------------------------------

方法的重写与重载的区别(Override与Overload)。重载的方法是否可以改变返回值的类型

方法的重写(Override)与重载(Overload)的区别.重载的方法是否可以改变返回值的类型?[基础] 解释: 方法的重写overriding和重载Overloading是Java多态性的不同表现. 1.重写overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现. 2.如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写(Overriding). 子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被"

Java方法的重写(override)

子类通过继承了父类以后就拥有了父类一切的属性和方法,然而有些父类中的方法对于子类可能并不适用,这时子类可以通过重写父类的方法,用自身的行为替代父类的行为,方法的重写是实现多态的必要条件. 下面一个demo,演示了方法的重写: package cn.ftf.o1; /** * 重写方法(override) * @author 房廷飞 * */ public class Override { public static void main(String[] args) { Horse h = new

10.方法重写Override

方法重写:Override: 需要有继承关系,子类重写父类的方法! 方法名必须相同 参数列表必须相同 修饰符:范围可以扩大,但不能缩小:public>protected>defalut>private 抛出异常:范围,可以被缩小,但不能扩大:ClassNotFoundException-->Exception 重写,子类的方法和父类的必须要一致:方法体不同! 为什么需要重写? 父类的功能,子类不一定需要,或者不一定满足! Alt+Insert:Override: 1 package

C#隐藏(new)方法和重写(override)方法

在基类调用的时候 隐藏方法还是调用基类的方法 而重写方法调用的就是子类的中的方法 同时,当子类中的方法与父类或者所实现的接口中的扩展方法冲突时,那么此时相当于一个隐藏方法 基类调用或者接口调用的时候使用的还是基类或者接口定义的扩展方法,而非继承类中的“新”方法.

重载overload和重写override的区别

public class MethodOverrideVSOverload { //因为参数与Object的equals方法不同,故没有重写equals方法,而是重载关系 public boolean equals(MethodOverrideVSOverload other) { System.out.println("MethodOverrideVSOverload"); return true; } /** * @param args */ public static void