我们知道,在java中,可以通过复盖来加强或减弱父类的方法,但复盖是针对非静态方法的。 那么,子类复盖父类的静态方法会怎么样呢?
父类
在父类中创建了两个方法和变量:静态方法和非静态方法。
子类
子类涵盖父类的两个方法和一个变量。 测试从现在开始~~~
测试类
首先,测试变量。 我们知道java的实例对象有两种类型:曲面类型和实际类型。 如果在测试类中,在实例的FatherMethod sm中,sm的表面类型是FatherMethod,实际类型是SonMethod,那么第一个语句输出的变量x的实际类型是SonMethod的x值吗? 还是原来的FatherMethod的x值呢?
然后,调用sm的静态方法和非静态方法。 调用静态方法时,如果使用实例对象进行调用,则下划线会发出警告。 强迫症请清除它。 实际上,java推荐的静态方法形式是按类名调用。 因为静态方法属于整个类。 那么,调用这三个方法会输出什么? 第一种方法是调用传统的非静态子类,所以答案应该很明显。 那么,如果调用第二个和第三个方法会怎么样呢? 是所有调用的父类的静态方法吗? 还是调用所有子类的静态方法? 还是调用各自的方法?
明确答案
测试结果
那么,看到这个结果有没有感到吃惊? 因此,在这里我们引入隐藏的概念。 隐藏是指在子类中重写父类的变量和静态方法。 与改写有两个不同。
的区别在于,隐藏用于静态方法或成员变量,重写用于非静态方法。
与责任不同,隐藏的目的是隐藏子类的方法或属性,而重写是加强或削弱父类的方法。
综上所述,写继承时请注意。 静态方法不能被重写,但可以被隐藏。 最后,从实例对象访问成员的属性和方法是一个不好的习惯。 有这个习惯的人请尽早改正~~~
谢谢你的观看~喜欢的关注一波~~每天分享一些知识~
最后附上每天记住的10个单词:
worship ['w:ip] n .崇拜; 礼拜; 尊敬
特殊[ ' SPE () l; e-] adj .特别的、特别的
suffice (传真) VT .令人满意; 充分使用; 合格
使其退化;使其退化; 恶化
advocate [ ' dv工具包; --t ) vt .提倡、主张和捍卫
木偶; 人偶; 没有头脑的美丽女人
感知n .一致; 舆论; 达成协议
grope.探索; 搜索
地图集; 寰椎
reason['Riz(n ) n .理由; 理性; 动机
每天一点一点地学习~~~加油~~!