码迷,mamicode.com
首页 > 其他好文 > 详细

多态与方法调用

时间:2015-09-27 00:00:20      阅读:383      评论:0      收藏:0      [点我收藏+]

标签:

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方法,子类不能够覆盖,不存在虚化问题

 

多态与方法调用

标签:

原文地址:http://www.cnblogs.com/penghuster/p/4840985.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!