Overriding vs Overloading in Java
2018-03-06 18:52
483 查看
定义
Overloading::同一个类中,方法名相同,但参数不同Overriding:两个类中(父类与子类)方法签名相同(方法名称一样,参数完全一致),Overriding允许子类根据实际场景“重载”实现父类中同名方法。
Overriding vs Overloading
Overriding涉及的是一个运行时概念,而Overloading涉及的是编译期概念多态是Overriding的应用场景,而非Overloading。
对象的实际类型而非对象引用类型决定了JVM运行时真正的调用方法,比如对于下面的语句, dog 就是一个对象引用,该引用指向了内存堆上的一个 Dog 对象,当JVM执行dog的相关方法时,实际调用的是 Hound 的相关方法,而非Dog中的相关方法
Overriding代码示例:
class Dog{ public void bark(){ System.out.println("woof "); } } class Hound extends Dog{ public void sniff(){ System.out.println("sniff "); } public void bark(){ System.out.println("bowl"); } } public class OverridingTest{ public static void main(String [] args){ Dog dog = new Hound(); dog.bark(); } }
代码输出如下:
bowl
简单解释如下:
在上面的示例中,dog是一个Dog类型的本地变量(或称局部变量: local variable ,对比理解对象的成员变量: member variable ),这是一个对象引用,该引用指向内存堆中某个具体的Dog对象,在编译期,Java虚拟机会检查Dog类是否包含 bark方法,一旦确定Dog类包含该方法,那么源代码就编译通过。在运行期,JVM会在内存堆上创建一个 Hound对象,并且将栈中的dog引用指向该地址,当虚拟机调用bark方法时,它调用的就是Hound的bark方法,这就是我们常说的多态(Dynamic Polymorphism )Overloading代码实例
class Dog { public void bark() { System.out.println("woof"); } public void bark(int num) { for (int i = 0; i < num; i++) { System.out.println("woof"); } } }
原文链接:https://www.programcreek.com/2009/02/overriding-and-overloading-in-java-with-examples/
相关文章推荐
- Overriding vs. Overloading in Java
- 【异常形象】overriding vs. Overloading in Java
- Java - Method Overloading vs Method Overriding
- java中重载Overriding与重写Overloading的区别
- getTimeInMillis() vs. DateTime.Now.Ticks——Java 和 .NET 获得毫秒级长整型数值的差异和解决 转
- Difference between trustStore vs keyStore in Java SSL
- Overriding Java methods in Groovy for unit testing
- Java中的方法重写(Overriding)与方法重载(Overloading)
- java API vs REST API in elasticSearch(未完)
- getTimeInMillis() vs. DateTime.Now.Ticks——Java 和 .NET 获得毫秒级长整型数值的差异和解决
- Comparable vs. Comparator in Java
- How to parse the overloading methods in Java 5.0
- java中的重载(overriding)跟重写(overloading)理解
- Java 中字段和变量的的区别(Fields vs Variables in Java)
- Difference between LinkedList vs ArrayList in Java
- Reflection vs Encapsulation – Stand Off in the Java Module System(5)
- java中重载(Overloading)和重写(Overriding)
- Regex expressions in Java \\s vs.\\s+
- Reflection vs Encapsulation – Stand Off in the Java Module System(4)
- 常见Java面试题 – 第三部分:重载(overloading)与重写(overriding)