多态与方法调用

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

 

转载于:https://www.cnblogs.com/penghuster/p/4840985.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值