网站建设公司正规吗,外贸出口剪标尾单,聊城网站制作价格,网站建设搜索键如何设置链接多态是面向对象编程#xff08;OOP#xff09;的一个核心概念#xff0c;允许不同类的对象被视为同一类型的实例#xff0c;并根据实际类型来响应相同的方法调用。
这意味着同一个接口可以用来引用属于不同类的对象#xff0c;而这些对象可以有自己的方法实现#xff0c…多态是面向对象编程OOP的一个核心概念允许不同类的对象被视为同一类型的实例并根据实际类型来响应相同的方法调用。
这意味着同一个接口可以用来引用属于不同类的对象而这些对象可以有自己的方法实现这些实现可以在运行时被动态地调用而不是在编译时。多态性增加了程序的灵活性和可扩展性。 多态有两种主要形式
编译时多态静态多态 编译时多态也称为静态多态是通过方法重载和运算符重载实现的。
这意味着在编译时就确定了将要执行哪个方法通常依赖于方法的参数列表方法的名称相同但参数的数量或类型不同。
方法重载Overloading
在同一个类中定义多个同名方法但是它们的参数列表不同参数的数量或类型不同。
根据传递给方法的参数类型和数量编译器决定调用哪个方法。 运行时多态动态多态 运行时多态也称为动态多态是通过方法重写Override实现的它允许子类提供一个特定于自己的实现覆盖父类的方法。
在这种情况下到底调用哪个方法是在程序运行时根据对象的实际类型动态决定的。
方法重写Overriding
子类重写继承自父类的方法。当通过父类引用调用该方法时实际调用的方法取决于对象的实际类型。
这是通过使用虚方法virtual methods和方法重写method overriding来实现的其中子类的方法会覆盖父类的同名方法。
基本语法
在Solidity中多态性通过继承和函数重写实现。
子类使用override关键字来指明它重写了父类中的函数。
父类可以使用virtual 关键字来指名他允许子类重写方法。
基本使用方式 - 方法重载
这是通过使用虚方法virtual methods和方法重写method overriding来实现的其中子类的方法会覆盖父类的同名方法。
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.24;contract BaseContract {function name() public pure virtual returns (string memory) {return BaseContract name;}
}contract Xm is BaseContract {function name() public pure override returns (string memory) {return Xm name;}
}contract Xl is BaseContract {function name() public pure override returns (string memory) {return Xl name;}
}修饰器重载
函数修改器可以相互重载。 这与 函数重载 的工作方式相同除了对修改器没有重载。
virtual 关键字必须用在被重载的修改器上 override 关键字必须用在重载的修改器上
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;contract A {modifier test() virtual{_;}
}contract B is A{modifier test() override {_;}
}
多重继承的重载
在多重继承的情况下必须明确指定所有的直接基类合约。
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;contract A {function getValue() public pure virtual returns (string memory) {return A;}
}contract B {function getValue() public pure virtual returns (string memory) {return B;}
}contract C is B,A {function getValue() public pure override( B,A) returns (string memory) {return super.getValue();}
}