zoukankan      html  css  js  c++  java
  • 【转】深入理解Java多态性

    http://developer.51cto.com/art/200906/130414.htm

    http://blog.csdn.net/cyzero/article/details/7266831

    总结:

    多态三要素(三个必须同时满足):继承、方法重写、父类引用指向子类对象

    当父类引用指向子类对象时,调用子类的成员方法(前提是这个方法必须在父类中定义过,而且不是父类的private方法)。

    方法调用的优先级(由高到低):this.show(O)>super.show(0)>this.show((super)O)>super.show((super)O)

     例1:输出B。存在多态。

    public class Test{
        public static void main(String args[]){
            B b=new B();
            A a = (A)b;//或A a = b;
            a.printValue();//B
        }
    }
    
    class A{
        public void printValue(){
            System.out.println("A");
        }
    }
    
    class B extends A{
        public void printValue(){
            System.out.println("B");
        }
    }

     例2:输出A。因为是静态方法,静态方法是编译时确定了的,不存在多态,即不能运行时绑定。

    public class Test{
        public static void main(String args[]){
            B b=new B();
            A a =(A)b;//或A a = b;
            a.printValue();//A
        }
    }
    
    class A{
        public static void printValue(){
            System.out.println("A");
        }
    }
    
    class B extends A{
        public static void printValue(){
            System.out.println("B");
        }
    }

      因为静态方法在内存中的地址空间是固定的,不存在冲突。也就是说,这两个方法在内存中占用了不同空间,具体执行哪个,要看由哪个类来调用。是A调用,所以只执行A中的静态方法。

  • 相关阅读:
    树四:遍历二叉树
    树三:创建二叉树
    树二:二叉树定义及性质
    树一:定义及存储
    排序七:归并排序
    排序六:快速排序
    排序五:希尔排序
    排序四:冒泡排序
    深入分析Linux内核链表
    179. Largest Number
  • 原文地址:https://www.cnblogs.com/seven7seven/p/3622028.html
Copyright © 2011-2022 走看看