Java中的方法的重载与重写(覆盖)
2013-07-29 09:24
302 查看
在Java的继承机制中,提供了方法的重载和重写(覆盖),在日常学习和笔试面试时常常容易混淆,因此,下面我们一起讨论下,有不足给我发评论,立即修改。 1.方法的重载 方法的重载必须满足一下条件: *方法名相同 *方法的参数类型、个数、顺序至少有一项不相同 *方法的返回类型可以不相同 *方法的修饰符可以不相同 2.方法的覆盖(重写) 1.子类的方法的名称、参数类型和返回类型与父类的方法的名称、参数类型和返回类型一致。 2.子类方法不能缩小父类方法的访问权限。 3.子类方法不能抛出比父类方法更多的异常。 4.方法的覆盖(重写)只能存在于子类和父类(包括直接父类和间接父类)之间,在同一个类中方法只能被重载,不能被覆盖(重写)。 5.父类的静态方法不能被子类覆盖(重写)为非静态的方法。 6.子类可以定义与父类静态方法同名的静态方法,以便在子类中隐藏父类的静态方法,在编译时,子类定义的静态方法也必须满足与方法覆盖(重写)类似的约束。 7.父类的静态方法不能被子类覆盖(重写)为非静态方法。 8.父类的私有方法不能被子类覆盖(重写)。 9.父类的抽象方法可以通过两种途径覆盖(重写):一是子类实现父类的抽象方法;二是子类重新声明父类的抽象方法。 10.父类的非抽象方法可以覆盖(重写)为抽象方法。 3.方法覆盖(重写)和方法重载具有以下不同点: *方法覆盖(重写)要求参数签名必须一致,而方法重载要求参数签名必须不一致# *方法覆盖(重写)要求返回类型必须一致,而方法重载对此不做限制
*方法覆盖(重写)只能用于子类覆盖(重写)父类的方法,方法重载用于同一个类的所有方法(包括从父类中继承而来的方法)。
*方法覆盖(重写)对方法的访问权限和抛出的异常有特殊的要求,而方法重载在这力面没有任何限制。
*父类的一个方法只能被子类覆盖(重写)一次,而一个方法在所在的类中可以被重载多次。
方法的重载的小例子:
总结:方法的重载都在一个类中,同类中的同名方法都为方法的重载。方法的重写(覆盖)的小例子:下面为父类的代码(注意printMessage()方法):
怎么能够然程序执行父类的printMessage()方法呢????
程序代码:
总结:在父子类之间的同名方法,一般都为方法的重写(覆盖),如果方法的参数类型、个数和顺序都相同则一定是方法的重写(覆盖)。
本文出自 “努力学习成就梦想” 博客,请务必保留此出处http://zhaoyanming.blog.51cto.com/7609220/1259466
*方法覆盖(重写)只能用于子类覆盖(重写)父类的方法,方法重载用于同一个类的所有方法(包括从父类中继承而来的方法)。
*方法覆盖(重写)对方法的访问权限和抛出的异常有特殊的要求,而方法重载在这力面没有任何限制。
*父类的一个方法只能被子类覆盖(重写)一次,而一个方法在所在的类中可以被重载多次。
方法的重载的小例子:
package Work; public class Test002 { public static void main(String[] args) { System.out.println(add(3)); System.out.println(add(3,4)); System.out.println(add(3.1,4.2)); } public static int add(int a,int b){ return a+b; } //一下为方法的重载分别为参数类型不同,参数个数不同 public static float add(float a,float b){ return a+b; } public static double add(double a,double b){ return a+b; } public static double add(double a){ return a; } }程序运行的结果为:
总结:方法的重载都在一个类中,同类中的同名方法都为方法的重载。方法的重写(覆盖)的小例子:下面为父类的代码(注意printMessage()方法):
package Work; public class Father { private String name ; public String getName() { return name; } public void setName(String name) { this.name = name; } public void printMessage(){ System.out.println("我是Father类中的方法!!"); } }下面是子类的代码(仅含有从父类继承过来的东西和对pringMessage()方法的重写):
package Work; public class Son extends Father{ public void printMessage(){ System.out.println("我是Son类中的方法!!!"); } }下面是我写的一个测试程序:
package Work; public class Text { public static void main(String[] args) { Father son = new Son(); son.printMessage(); Father fat = son;//此为Java中的多太 fat.printMessage(); } }程序的运行结果又是什么呢????
怎么能够然程序执行父类的printMessage()方法呢????
程序代码:
package Work; public class Text { public static void main(String[] args) { Father son = new Son(); son.printMessage(); Father fat = son;//此为Java中的多太 fat.printMessage(); fat = new Father(); fat.printMessage(); } }程序的运行结果:
总结:在父子类之间的同名方法,一般都为方法的重写(覆盖),如果方法的参数类型、个数和顺序都相同则一定是方法的重写(覆盖)。
本文出自 “努力学习成就梦想” 博客,请务必保留此出处http://zhaoyanming.blog.51cto.com/7609220/1259466
相关文章推荐
- Java 中方法的重写,重载与覆盖的关系
- Java 中方法的重写,重载与覆盖的关系
- Java中的方法重载和重写(覆盖)
- java基础---方法的重载(overload)和覆盖(重写)(override)
- Java继承中方法的覆盖(重写)和重载
- Java学习之方法重载和方法重写(覆盖)比较
- JAVA方法的重写与重载的原则
- Java之方法的重写、重载、泛型
- java方法的重载(Overload)与重写(Override)
- JAVA学习(10) 继承(2) 继承中的方法的覆盖和重载
- Java重写的方法和覆盖
- Java中实例方法,实例变量,静态方法,静态变量,final方法重写的问题,覆盖
- Java--方法重写,重写(Override)与重载(Overload)区别
- JAVA重写(覆盖)与重载
- java4.方法重写和重载
- java基础:super和覆盖方法、重载方法(0921.2016)
- 详细讲解Java中方法的重载和重写
- java方法的重载与覆盖
- Java方法继承、方法重载、方法覆盖,多态和super关键字小总结
- Java继承和多态===Java继承中方法的覆盖和重载