Java 方法重写(难)

目录

1.A类和B类都写一个相同的方法,先用static,两边都是一样的:

2.A类和B类都去掉static,出现了两个圆圈的符号,代表重写:

3.总结

4.为什么需要重写?

5.哪些方法不能被重写?


代码演示:首先new一个A类和B类,A类继承B类,B是父类。

1.A类和B类都写一个相同的方法,先用static,两边都是一样的:

重写都是方法的重写,和属性无关。

在Application中new一个A类的对象a,用来调用A类的test( )方法:

结果:

再写B b = new A(); 对象b用来调用B类的test( )方法。父类的引用指向了子类

结果:

因为方法的调用只和左边定义的数据类型有关,和右边的new A( ) 没有关系。

2.A类和B类都去掉static,出现了两个圆圈的符号,代表重写:

把A中写的方法删掉,然后快捷生成重写方法:alt+insert ,选择B类的test方法。

生成结果如下。@Override 是有功能的注解

默认调用父类的方法,我们可以写不同的方法体:

同样运行Application,结果截然相反,都是走的A类的方法

这两种结果只和有无static有关:

static时,b调用了B类的方法,因为b是用B类定义的

没有static时,b调用的A类的方法,而b是用Anew

总结成一句话:静态方法是类的方法,非静态是对象的方法。

重写只能非静态方法,且只能是public类型的,否则不算重写。

重载是本类中,相同方法参数列表的不同;重写是子父类之间才存在:子类继承了父类,子类重写父类的方法。

3.总结

(1)重写需要有继承关系,子类重写父类的方法。

(2)重写,子类和父类的方法必须要一致:方法名必须相同,参数列表必须相同,方法体可以不同。

(3)子类的修饰符范围可以比父类扩大不能缩小:public > protected > default > private

(4)重写可能会抛出异常,子类相较于父类抛出的异常范围可以被缩小,不能扩大。(子类比父类应该越来越优化,问题应该越来越少)e.g.ClassNotFoundException的总异常为Exception(范围更大)

(5)快捷键alt+insert 选override

4.为什么需要重写?

父类的功能子类不一定需要,或者不一定满足。

5.哪些方法不能被重写?

(1)static 方法,属于类,它不属于实例

(2)final 常量

(3)private方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值