这篇文章给大家分享的是有关Java中方法重载和方法重写的区别有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
方法重载
方法重载的主要是在一个类当中,方法的方法名相同,参数列表不同,返回值类型可以相同,也可以不同.
/* 这里只是简单的示例一下,Food Snack没有给出,意会一下即可. */ public class Demo{ public void eat(Food food){ System.out.println("今天正常吃饭!吃了" + food.name); } public void eat(Snack snack){ System.out.println("今天想吃零食!吃了" + snack.name); } public int eat(){ int money = 10; System.out.println("今天喝西北风!但是省钱了,返回省钱的数目"); return 10; } //public void eat(){ // int money = 10; // System.out.println("今天喝西北风!但是省钱了,返回省钱的数目"); //} }
注意:如果参数列表相同,返回值类型不同是不算重载的.这种写法会直接报错.因为在调用方法的时候,我们还不知道方法的返回值类型,所以编译器无法区分你调用的是哪个方法,肯定就傻掉了,所以就告诉你,兄弟你写错了!
方法的重写体现在子父类当中,最典型的是子类重写父类中的方法.
Father类和Son类都有Walk(boolean canRun)方法.
但是执行的时候结果却不同.
public class Father { private boolean canRun = false; public boolean isCanRun() { return canRun; } public void setCanRun(boolean canRun) { this.canRun = canRun; } public void walk(boolean canRun){ if(canRun){ System.out.println("父亲尽力跑啊跑!"); }else{ System.out.println("父亲老了,只可以走路!"); } } }
public class Son extends Father{ boolean canRun; public Son(boolean canRun){ this.canRun = canRun; } @Override public void walk(boolean canRun) { if(canRun){ System.out.println("儿子可以跑!"); }else{ System.out.println("儿子也只能走!"); } } }
public class Test { public static void main(String[] args) { Father father = new Father(); Son son = new Son(true); father.walk(father.isCanRun()); son.walk(son.canRun); } }
这里体现的就是子类Son重写了父类中的Walk()方法.
注意:重写这里有一个重要的点在于子类重写的方法不能低于父类方法的访问权限.
可以简单理解一下:在多态当中,父类引用指向子类对象,如果子类对象中重写的方法权限低于父类方法了,那么多态情况下,父类引用就无法访问子类中的方法了.
public class Test { public static void main(String[] args) { Father father = new Son(true); System.out.println(father.isCanRun()); // false father.walk(father.isCanRun()); // 儿子也只能走! } }
这里很神奇,明明我的Son对象创建的时候传入的参数是true,为什么执行结果却是儿子也只能走!
呢?
这里先进行一下这个知识点的小结,上面的问题会在下一个文章中讲解.
感谢各位的阅读!关于“Java中方法重载和方法重写的区别有哪些”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。