zoukankan      html  css  js  c++  java
  • 多态与方法调用

    1 多态(ploymorphism)指一个程序中相同的名字表示不同的含义的情况

    1.1 编译时多态:函数重载(overload),多个同名的不同方法

        e.g.  p.sayhallo()   p.sayhallo("wang")

    1.2 运行时多态

    • 覆盖(override):子类对父类方法的覆盖
    • 动态绑定:---即虚方法调用
    • 调用时程序会根据context自动正确的决定调用子类对象的方法

    2 方法调用

    注意:上溯造型(upcasting)----把派生类型当做基本类型处理

    2.1 虚方法调用----可以实现运行时的多态

    • 子类重载了父类的方法
    • 运行时,系统根据调用该方法的实际类型来决定选择调用哪个方法
    • 所有非final的方法调用时都会自动选择动态绑定(dynamic binding)

    2.2 instanceOf  

       if(实例名  instanceOf 类型名)

    public class DrawShape {
        public static void main(String[] arg){
            Shape t = new Triangle();
            Shape r = new Rectangle();    
            Shape q = new Quadrangle();
            drawStuff(t);
            drawStuff(r);
            drawStuff(q);
            
        }
        
        static void drawStuff(Shape shape){
            shape.draw();
        }
    }
    
     class  Shape{
        public  void draw(){
            System.out.println("Draw a shape;");
        };
    }
    
    class Triangle extends Shape{
        public void draw(){
            System.out.println("Draw a triangle;");
        }
    }
    
    class Rectangle extends Shape{
        public void draw(){
            System.out.println("Draw a Rectangle;");
        }
    }
    
    class Quadrangle extends Shape{
        public void draw(){
            System.out.println("Draw a Quadrangle;");
        }
    }
    View Code

    2.3 三种非虚方法调用

    • static方法,以申明的类型为准,与实例无关
    • private方法,子类看不见,也不会被虚化
    • final方法,子类不能够覆盖,不存在虚化问题
  • 相关阅读:
    c++常用库
    boost
    android
    UITableView 多选
    c++ 比较两个集合
    事件加不上的另一种原因
    ios多线程
    ubuntu android
    jna StdCallCallback 回调问题查证
    java
  • 原文地址:https://www.cnblogs.com/penghuster/p/4840985.html
Copyright © 2011-2022 走看看