delphi中覆盖override父类的静态方法和虚函数有啥不同?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了delphi中覆盖override父类的静态方法和虚函数有啥不同?相关的知识,希望对你有一定的参考价值。

还有个问题:覆盖和重写是一个东西吗?

静态方法不能被覆盖来支持多态性,虚函数可以被覆盖。
覆盖和重写是不一样的,覆盖是将父类中定义的函数重新写一个同名实现,在调用时将不能调用父类中的此函数,重写是将父类中定义的函数写一个名称相同,参数类型或数量不同的函数,在调用时父类的同名函数还可以调用。
参考技术A 覆盖是替换你原来的类吧。重写是保留原来的类 但是类的参数不同 参数类型和个人不同的话就是不同的类 也就可以定义不同的方法。但是静态方法覆盖后的方法运行速度比虚方法的重写要快的多。

22.1 Extends 继承的 方法重写@Override的使用

/*
* 继承中成员方法的特点
* 子类中没有这个方法,调用父类的
* 子类中重写了这个方法,调用子类的
*

方法的重写:在子父类当中,子类的方法和父类的完全一样,子类重写了父类的方法(覆盖),当子类重写了父类的方法之后,使用子类对象调用的就是子类的方法
方法的重载:在一个类中,有多个重名的方法,但是其参数不一样(参数的个数,参数的类型,参数的顺序),和返回值无关

* 方法重写的应用场景:当父类的方法不能完全满足子类使用,这个时候子类重写父类的方法,
* 并可以在方法中使用关键字super调用父类的方法,这样做即可以保有父类的功能,也可以拥有子类特有的功能
*
* 方法重写的注意事项:
* 不能重写父类私有的方法
* 权限必须大于等于父类方法的权限
*
* 注解:@
* @Override:可以验证子类中的方法是否和父类中的一样,若和父类方法不同则报错。(不加@Override不会报错但是方法就是新的方法不是继承父类的方法)

public class Review 
    public static void main(String[] args) 
        NewPhone n = new NewPhone();
        n.call();
    


class Phone 
    public void call() 
        System.out.println("打电话");
    


class NewPhone extends Phone 
    @Override 
    public void call() 
        System.out.println("看电视");//重写父类中的call方法
        super.call();//使用super调用父类的方法
    

输出

技术图片

 

以上是关于delphi中覆盖override父类的静态方法和虚函数有啥不同?的主要内容,如果未能解决你的问题,请参考以下文章

重写(overwrite)重载(overload)和覆盖(override)三者之间的区别

重写(override)和重载(overload)的区别

Override(重写)和Overload(重载)的区别

继承&成员函数&覆盖

Java中的方法覆盖(Overriding)和方法重载(Overloading)是啥意思?

Java中的方法覆盖(Overriding)和方法重载(Overloading)是什么意思?