本文主要是介绍JAVA覆盖和重写的区别及说明,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
《JAVA覆盖和重写的区别及说明》非静态方法的覆盖即重写,具有多态性;静态方法无法被覆盖,但可被重写(仅通过类名调用),二者区别在于绑定时机与引用类型关联性...
JAVA覆盖和重写的区别
经常听到两种话
- 1.覆盖=重写。
- 2.静态方法可android以覆盖但不能重写吗,这两句话听起来挺矛盾的是不是
废话不多说直接上图:
package com.编程wangshili; public class Main { public static void main(String[] args) { Father f =new Child();//创建子类对象,父类引用 f.print();//调用父类方法 ((Child)f).print();//向下转型,调用子类方法 while(truephp); } } /* * 重写有多态,调用方法时看对象 */ 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 stawww.chinasem.cntic void print(){ System.out.println ("这是子类"); } }
认真读完上面两份代码
你应该能发现区别了,我总结下:
1.非静态方法,覆盖=重写,有多态
2.静态方法,是不能重写的,比如你添加@overwrite直接就报错了,我们知道静态属于类,通过类名就可以直接调用该方python法,所以这里也是一样,只看引用类型,跟创建对象类型无关。
这篇关于JAVA覆盖和重写的区别及说明的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!