当前位置: 首页 > news >正文

重写父类方法

注意:"重写"只能适用于实例方法.不能用于静态方法.因为静态方法只与类相关,不与具体实现相关,声明的是什么类,则引用相应类的静态方法(本来静态无需声明,可以直接引用)。

多态同理: 静态方法的调用不需要实例化,不实例化也就不能用多态了,也就没有所谓的父类引用指向子类实例.因为不能实例化 也就没有机会去指向子类的实例。所以也就不存在多态了。

 

如果从重写方法会有什么特点来看,我们是不能重写静态方法的。虽然就算你重写静态方法,编译器也不会报错。也就是说,如果你试图重写静态方法,Java不会阻止你这么做,但你却得不到预期的结果(重写仅对非静态方法有用)。重写指的是根据运行时对象的类型来决定调用哪个方法,而不是根据编译时的类型。让我们猜一猜为什么静态方法是比较特殊的?因为它们是类的方法,所以它们在编译阶段就使用编译出来的类型进行绑定了。使用对象引用来访问静态方法只是Java设计者给程序员的自由。我们应该直接使用类名来访问静态方法,而不要使用对象引用来访问。

让我们看一个例子,来看看重写静态方法会发生什么:

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
class SuperClass{
......
public static void staticMethod(){
System.out.println( "SuperClass: inside staticMethod" );
}
......
}
 
public class SubClass extends SuperClass{
......
//overriding the static method
public static void staticMethod(){
System.out.println( "SubClass: inside staticMethod" );
}
 
......
public static void main(String []args){
......
SuperClass superClassWithSuperCons = new SuperClass();
SuperClass superClassWithSubCons = new SubClass();
SubClass subClassWithSubCons = new SubClass();
 
superClassWithSuperCons.staticMethod();
superClassWithSubCons.staticMethod();
subClassWithSubCons.staticMethod();
...
}
 
}

输出:

1
2
3
SuperClass: inside staticMethod
SuperClass: inside staticMethod
SubClass: inside staticMethod

注意第二行输出。假设staticMethod方法被重写了,它的结果应该和第三行一样,也是调用运行时的类型SubClass的staticMethod(),而不是SuperClass的staticMethod()方法。这也就证明了静态方法是在编译阶段使用了编译类型信息,进行静态绑定的。

 

转载于:https://www.cnblogs.com/thiaoqueen/p/6500853.html

相关文章:

  • 集中化管理平台saltstack--原理及部署
  • Discuz! X2.5RC 全新安装图文教程
  • java 成员变量与局部变量
  • FineReport中如何实现自动滚屏效果
  • Linux如何查看进程、杀死进程、启动进程等常用命令
  • ViewPager结合view无限滑动
  • 30个php操作redis常用方法代码例子
  • 替换值
  • git简易教程
  • java的PDF纵横向打印
  • 微信三方登录相关(Swift)
  • 大数加法模板
  • System类
  • PyOdps 0.4版本发布,从一个故事说起
  • 电话面试总结
  • [译]Python中的类属性与实例属性的区别
  • ES6系统学习----从Apollo Client看解构赋值
  • fetch 从初识到应用
  • isset在php5.6-和php7.0+的一些差异
  • Java 9 被无情抛弃,Java 8 直接升级到 Java 10!!
  • linux安装openssl、swoole等扩展的具体步骤
  • Making An Indicator With Pure CSS
  • spring cloud gateway 源码解析(4)跨域问题处理
  • SQLServer插入数据
  • Vue ES6 Jade Scss Webpack Gulp
  • windows下使用nginx调试简介
  • 阿里云容器服务区块链解决方案全新升级 支持Hyperledger Fabric v1.1
  • 初识MongoDB分片
  • 给Prometheus造假数据的方法
  • 官方解决所有 npm 全局安装权限问题
  • 面试遇到的一些题
  • 前嗅ForeSpider教程:创建模板
  • 使用 Docker 部署 Spring Boot项目
  • 智能合约Solidity教程-事件和日志(一)
  • 《TCP IP 详解卷1:协议》阅读笔记 - 第六章
  • #大学#套接字
  • $.each()与$(selector).each()
  • (4)STL算法之比较
  • (Repost) Getting Genode with TrustZone on the i.MX
  • (zhuan) 一些RL的文献(及笔记)
  • (六)软件测试分工
  • (转)LINQ之路
  • .aanva
  • .NET/C# 检测电脑上安装的 .NET Framework 的版本
  • .net企业级架构实战之7——Spring.net整合Asp.net mvc
  • [ 云计算 | AWS ] AI 编程助手新势力 Amazon CodeWhisperer:优势功能及实用技巧
  • [Android Studio 权威教程]断点调试和高级调试
  • [CentOs7]搭建ftp服务器(2)——添加用户
  • [ERROR]-Error: failure: repodata/filelists.xml.gz from addons: [Errno 256] No more mirrors to try.
  • [E链表] lc83. 删除排序链表中的重复元素(单链表+模拟)
  • [HDOJ4911]Inversion
  • [hdu 4405] Aeroplane chess [概率DP 期望]
  • [java] 23种设计模式之责任链模式
  • [LeetCode] Verify Preorder Sequence in Binary Search Tree 验证二叉搜索树的先序序列
  • [MAC OS] 常用工具