Java overload和override(重载和覆盖)的区别
多态是面向对象程序设计中代码重用的一个重要机制,它表示当同一个操作作用在不同的对象的时候,会有不同的语义,从而会产生不同的结果。比如:同样是“+”操作,3+4 用来实现整数相加,而“3”+“4”却实现了字符串的连接。
在 Java 语言中,多态主要有以下两种表现方式:
在 Java 语言中,基类的引用变量不仅可以指向基类的实例对象,也可以指向其子类的实例对象。同样,接口的引用变量也可以指向其实现类的实例对象。
而程序调用的方法在运行期才动态绑定(绑定指的是将一个方法调用和一个方法主体连接到一起),就是引用变量所指向的具体实例对象的方法,也就是内存里正在运行的那个对象的方法,而不是引用变量的类型中定义的方法。通过这种动态绑定的方法实现了
在执行 Base b=new Derived() 语句的时候,会调用 Base 类的构造函数,而在 Base 的构造函数中,执行了 g() 方法,由于 Java 语言的多态特性,此时会调用子类 Derived 的 g() 方法,而非父类 Base 的 g() 方法,因此会输出 Derived g()。由于实际创建的是 Derived 类的对象,后面的方法调用都会调用子类 Derived 的方法。
声明:《Java系列教程》为本站“54笨鸟”官方原创,由国家机构和地方版权局所签发的权威证书所保护。
在 Java 语言中,多态主要有以下两种表现方式:
1. 重载(Overload)
重载是指同一个类中有多个同名的方法,但这些方法有着不同的参数,因此可以在编译的时候就可以确定到底调用哪个方法,它是一种编译时多态。重载可以被看作一个类中的方法多态性。2. 覆盖(Override)
由于子类可以覆盖父类的方法,因此同样的方法会在父类与子类中有着不同的表现形式。在 Java 语言中,基类的引用变量不仅可以指向基类的实例对象,也可以指向其子类的实例对象。同样,接口的引用变量也可以指向其实现类的实例对象。
而程序调用的方法在运行期才动态绑定(绑定指的是将一个方法调用和一个方法主体连接到一起),就是引用变量所指向的具体实例对象的方法,也就是内存里正在运行的那个对象的方法,而不是引用变量的类型中定义的方法。通过这种动态绑定的方法实现了
多态
。
示例1
由于只有在运行时才能确定调用哪个方法,因此通过方法覆盖实现的多态也可以被称为运行时多态。Java 代码如下:class Base { public Base() { g(); } public void f() { System.out.println("Base f()"); } public void g() { System.out.println("Base g()"); } } class Derived extends Base { public void f() { System.out.println("Derived f()"); } public void g() { System.out.println("Derived g()"); } } public class Test { public static void main(String[] args) { Base b = new Derived(); b.f(); b.g(); } }运行结果为:
Derived g()
Derived f()
Derived g()
在执行 Base b=new Derived() 语句的时候,会调用 Base 类的构造函数,而在 Base 的构造函数中,执行了 g() 方法,由于 Java 语言的多态特性,此时会调用子类 Derived 的 g() 方法,而非父类 Base 的 g() 方法,因此会输出 Derived g()。由于实际创建的是 Derived 类的对象,后面的方法调用都会调用子类 Derived 的方法。
示例2
只有类中的方法才有多态的概念,类中成员变量没有多态的概念。Java 代码如下:class Base { public int i = 1; } class Derived extends Base { public int i = 2; } public class Test { public static void main(String[] args) { Base b = new Derived(); System.out.println(b.i); } }运行结果为:
1
由此可见,成员变量是无法实现多态的,成员变量的值取父类还是子类并不取决于创建对象的类型,而是取决于定义的变量的类型。这是在编译期间确定的。在上例中,因为 b 所属的类型为 Base,b.i 指的是 Base 类中定义的 i,所以程序输出结果为 1。声明:《Java系列教程》为本站“54笨鸟”官方原创,由国家机构和地方版权局所签发的权威证书所保护。