多态

类型

  • 编译时多态:方法重载;在Java中方法名和参数列表称为方法的签名,子类中若有和父类签名相同的方法则会覆盖
  • 运行时多态:JAVA运行时系统根据调用该方法的实例的类型来决定选择调用哪个方法则被称为运行时多态。(我们平时说得多的是运行时多态,所以多态主要也是指运行时多态)
    注:另一种观点认为不要把函数重载理解为多态。
    运行时多态存在的三个必要条件
    要有继承(包括接口的实现)
    要有重写(子类重写父类的方法)
    父类引用指向子类对象

例子

public class Test {
    static public void main(String [] args){
        A b = new B();
        b.sayHello();
        b.funForB();
        //如果就想用b调用funForB怎么做
    }
}

class A{
    public void sayHello(){
        System.out.println("Hi Im A");
    }
}

class B extends A{
    public void sayHello(){
        System.out.println("Hi Im B");
    }
    public void funForB(){
        System.out.println("function for B");
    }
}

理解

当使用多态方式调用方法时,首先检查父类中是否有该方法,==如果没有,则编译错误==;
如果有,再去检查子类中是否存在同名方法,若存在则调用子类的同名方法,否则调用当前类的方法。
注意:static方法、final方法、private方法和构造器属于特殊情况,如果调用这些方法则编译器可以准确的知道应该调用哪个方法,这种方式叫做静态绑定。
static方法只能继承,不能重写Override,如果子类中定义了同名同形式的静态方法,它对父类方法只起到隐藏的作用。调用的时候用谁的引用,则调用谁的版本。
final方法不能被重写

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容