多态

前期绑定与动态绑定

  • 前期绑定

程序执行前就已经知道方法所属的类

注: final 、static、private修饰的方法是前期绑定,其余方法都是后期绑定

  • 后期(动态)绑定

运行时根据对象的类型进行绑定(面向接口)

注:使用final可以关闭动态绑定,但不会增加性能

构造器

  1. 不具有多态,实际是static方法
  2. 父类构造器参数列表必须与子类相同,因为在new子类对象时首先会创建父类对象
  3. 主要用于初始化

协变返回类型

方法可以返回返回类型的导出类型

class AA{
}
class BB extends AA{	
}
	
class A{
	AA a() {return new AA();}
}
class B extends A{
	AA a() {return new BB();}//允许返回更具体的类型
}

继承设计

  • 向上转型

子类与基类接口方法相同,基类无需知道子类的信息,使用父类方法时只需子类向上转型

  • 向下转型

    向上转型的缺点: 当子类扩展了基类方法,使用向上转型不可以使用新方法,造成信息丢失

      class A{
      	void a() {}
      }
      class B extends A{
      	void b() {}
      }
      public class DowntransforTest {
      	public static void main(String[] args) {
      		A[] x = {new A(),new B()};
      		((B)x[0]).b();//报类转型异常:java.lang.ClassCastException  
              ((B)x[1]).b();
      	}
      }
原文地址:https://www.cnblogs.com/mdc1771344/p/9908799.html