1-9方法的重写(override)

Posted superfly123

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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");
    }
}

以上是关于1-9方法的重写(override)的主要内容,如果未能解决你的问题,请参考以下文章

Java中重载(Overload)和重写(Override)的定义

方法的重写override,重载overload。

c#基础-19.重写(override)和覆盖(new)的区别

智能合约实战 solidity 语法学习 12 [ virtual 重写override 抽象abstract 接口interface 库library 销毁selfdestruct] 附代码(代码片

智能合约实战 solidity 语法学习 12 [ virtual 重写override 抽象abstract 接口interface 库library 销毁selfdestruct] 附代码

智能合约实战 solidity 语法学习 12 [ virtual 重写override 抽象abstract 接口interface 库library 销毁selfdestruct] 附代码