Java多态机制的特点
2016-03-10 00:00
274 查看
摘要: 通过一道题目来深入理解多态中的动态绑定
这个的输出结果为:
补充:
这段代码的输出结果为:
参考资料:《Java程序员面试笔试》
class AP{ public AP() { g();//这里到底会调用哪个函数呢》是父类AP的,还是子类A } public void f() { System.out.println("AP f()"); } public void g() { System.out.println("AP g()"); } } public class A extends AP{ @Override public void f() { System.out.println("A f()"); } @Override public void g() { System.out.println("A g()"); } public static void main(String[] args) { AP instance = new A(); instance.f(); instance.g(); } }
这个的输出结果为:
A g() A f() A g()
结果分析: 运行结果告诉我们,在创建子类时,同时也会调用父类的构造函数, 但,当我们在构造函数 public AP()中调用g()时,代码运行的是 子类中覆盖的g()方法。 原理: 这个是由于java的动态绑定机制导致的,(绑定指的是讲一个方法调用和一个方法主体连接 到一起),就是引用变量所指向的具体实例对象的方法,也就是内存里正在运行的那个对象 方法。因为此时内存中存在的对象为 A class,所以在AP() {g();} 这里调用的g()方法 实体为 @Override public void g() { System.out.println("A g()"); }
补充:
只有类中的方法才有多态的概念,类中的成员没有,下面举个例子
class AP{ public String string = "AP"; } public class A extends AP{ public String string = "A"; public static void main(String[] args) { AP instance = new A(); System.out.println(instance.string); } }
这段代码的输出结果为:
AP//而不是 A
参考资料:《Java程序员面试笔试》
相关文章推荐
- C#与.net高级编程 C#的多态介绍
- C#中面向对象编程机制之多态学习笔记
- C#中的多态深入理解
- C#中多态、重载、重写区别分析
- 设计引导--一个鸭子游戏引发的设计理念(多态,继承,抽象,接口,策略者模式)
- C++实现动态绑定代码分享
- javascript每日必学之多态
- c#基础学习之多态
- 深入理解C++的动态绑定与静态绑定的应用详解
- PHP面向对象三大特点学习(充分理解抽象、封装、继承、多态)
- asp.net中一次性动态绑定多个droplistdown
- 从汇编看c++中多态的应用
- javascript 面向对象全新理练之继承与多态
- Java多态的使用注意事项
- javascript下动态this与动态绑定实例代码
- C#使用虚拟方法实现多态
- 实例讲解PHP面向对象之多态
- PHP5多态性与动态绑定介绍
- C#中多态现象和多态的实现方法
- C++基础之this指针与另一种“多态”