我们可以覆盖竞彩篮球分析中的静态方法吗
不,我们不能覆盖 静态的 爪哇 中的方法。静态方法是可以在不创建类对象的情况下调用的方法,它们是类级别的方法。
另一方面,如果子类具有与基类相同的方法签名,则称为 方法覆盖。它的执行在运行时决定。
以下是我们无法在竞彩篮球分析中覆盖静态方法的原因:-
- 静态方法是属于该类的那些方法,它们不属于对象,并且在覆盖时,对象决定要调用的方法。
- 方法覆盖是动态(运行时)发生的,这意味着要在运行时根据用于调用的对象决定要执行的方法,同时静态查找静态方法(编译时)。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
包 组织 . Arpit . 爪哇 2blog; 类 显示 { 上市 静态的 虚空 您好 () //静态方法 { 系统. 出 .打印(“你好,早上好”); } } 类 显示讯息 延伸 显示 { 上市 静态的 虚空 您好 () //在派生类中重新定义基类静态方法 { 系统. 出 .打印(“大家好”); } } 上市 类 显示讯息 { 上市 静态的 虚空 主要 (串 args []) { 显示 d= 新 显示(); //创建基类对象 d. 您好 (); d= 新 显示讯息(); //基类引用引用派生类对象,根据覆盖规则,应调用DisplayMessage 您好 () d. 您好 (); //但它调用Display类hello() 显示讯息 ds = 新 显示讯息(); //创建派生类对象 ds . 您好 (); } } |
当您在程序上方运行时,将得到以下输出。
输出:
你好,早上好
你好,早上好
大家好
根据方法重写的规则,方法调用在运行时由对象类型解决。因此,在我们上面的示例中,第二个示例中的d.hello()应该调用DisplayMessage类的hello()方法,因为Display类的引用变量引用DisplayMessage的对象,但它本身调用Display类hello()。这是因为在编译时解析了静态方法。
所以如果派生类’s的静态方法具有与基类相同的签名’s静态方法,称为方法隐藏而不是方法覆盖。