java覆盖和重写的区别
经常听到两种话
- 1.覆盖=重写。
- 2.静态方法可以覆盖但不能重写吗,这两句话听起来挺矛盾的是不是
废话不多说直接上图:
package com.wangshili; public class main { public static void main(string[] args) { father f =new child();//创建子类对象,父类引用 f.print();//调用父类方法 ((child)f).print();//向下转型,调用子类方法 while(true); } } /* * 重写有多态,调用方法时看对象 */ class father{ public void print(){ system.out.println ("这是父类"); } } class child extends father{ public void print(){ system.out.println ("这是子类"); } }
package com.wangshili; public class test { public static void main(string[] args) { father f =new child();//创建子类对象,父类引用 f.print();//调用父类方法 ((child)f).print();//向下转型,调用子类方法 while(true); } } /* * 覆盖没多态,调用方法时看引用类型(静态属于类) */ class father{ public static void print(){ system.out.println ("这是父类"); } } class child extends father{ public static void print(){ system.out.println ("这是子类"); } }
认真读完上面两份代码
你应该能发现区别了,我总结下:
1.非静态方法,覆盖=重写,有多态
2.静态方法,是不能重写的,比如你添加@overwrite直接就报错了,我们知道静态属于类,通过类名就可以直接调用该方法,所以这里也是一样,只看引用类型,跟创建对象类型无关。
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
发表评论