您的位置 首页 java

java子类覆盖父类的静态方法会怎么样?引出隐藏和覆盖的区别

我们知道在 java 中可以通过覆盖来增强或者减弱父类的方法,但是覆盖是针对非 静态方法 的,那么,子类覆盖父类的静态方法会变成什么样呢? java子类覆盖父类的静态方法会怎么样?引出隐藏和覆盖的区别

父类

父类里面建立两个方法和一个变量,一个是静态方法,一个是非静态方法。

java子类覆盖父类的静态方法会怎么样?引出隐藏和覆盖的区别

子类

子类里面覆盖父类的两个方法和一个变量。接下去开始测试了~~

java子类覆盖父类的静态方法会怎么样?引出隐藏和覆盖的区别

测试类

首先,测试变量,我们知道在java的实例对象有两种类型,一种是表面类型,一种是实际类型。在测试类中实例的FatherMethod sm中sm的表面类型为FatherMethod,实际类型为SonMethod,那么第一句输出的变量X的实际类型为SonMethod的X值吗?还是原来的FatherMethod的X值呢?

其次,调用sm的静态方法和非静态方法,调用静态方法的时候,如果采用实例对象去调用的话,会有下划线提示警告~强迫症必须把它去掉哈哈!其实java里面推荐的调静态方法的形式为用类名去调用,因为静态方法是属于整个类的。那么调用这三个方法会输出什么呢?第一个是传统的调用非静态的子类方法,所以答案应该显而易见了。那么调用第二个方法和第三个方法会出现什么结果呢?是都调用的父类的静态方法还是都是调用子类的静态方法,还是各自调各自的呢?

揭晓答案

java子类覆盖父类的静态方法会怎么样?引出隐藏和覆盖的区别

测试结果

好吧,看到这个结果有没有恍然大悟呢?所以这里要引入隐藏的概念了,隐藏指的是在子类中重写了父类的变量和静态方法。它和重写有两种不同:

  1. 表现形式的不同,隐藏是用于静态方法或者成员变量的而重写是用于非静态方法。

  2. 职责不同,隐藏的目的是为了隐藏子类的方法或者属性,而重写是对父类的方法进行增强或者削弱。

综上所诉,大家在写继承的时候一定要注意,静态方法不能重写但是可以隐藏,最后再说一句,通过实例对象访问成员属性和方法是不好的习惯,有这个习惯的尽早改正哈哈~~~

谢谢收看~喜欢的关注一波~~每天分享一些知识~~

最后附上每天背的10个单词:

worship [‘wə:ʃip] n. 崇拜;礼拜;尊敬

especial [ɪ’speʃ(ə)l; e-] adj. 特殊的,特别的

suffice [sə’faɪs] vt. 使满足;足够…用;合格

degenerate [dɪ’dʒen(ə)rət] vt. 使退化;恶化

advocate [‘ædvəkeɪt;-ət] vt. 提倡,主张,拥护

doll [dɒl] n. 洋娃娃;玩偶;无头脑的美丽女人

consensus [kən’sensəs] n. 一致;舆论;合意

grope [grəʊp] vi. 摸索;探索

atlas [‘ætləs] n. 地图集;寰椎

reason [‘riːz(ə)n] n. 理由;理性;动机

每天学习一点点~~~加油~~!

文章来源:智云一二三科技

文章标题:java子类覆盖父类的静态方法会怎么样?引出隐藏和覆盖的区别

文章地址:https://www.zhihuclub.com/174164.shtml

关于作者: 智云科技

热门文章

网站地图