8.继承与多态

一.继承

  1.概念:子类继承父类,使得子类对象具有父类的属性和方法

    除了private权限的都可以,构造器不能继承,但是可以在子类构造器中使用

    只支持单继承,不像接口,支持多继承

  2.super关键字:

  • 调用父类无参构造器
  • 必须放在第一行。和this关键字很像,一个代表本类对象,一个代表父类对象
  • 虽然代表父类,但是归属于本类
  • 在子类的无参构造器中会默认调用父类的无参构造器
  • 当父类没有无参构造器时,子类会报错,此时必须显式调用父类的某一个构造器
  • why必须用super()调用父类?因为必须初始化,父类构造器执行后子类才能用。

  3.重写(变量隐藏和方法重写)

  • 当子类继承方法时,可重写。
  • 要求:方法名,参数列表,返回值都相同,但是子类权限要大于等于父类权限

  4.创建对象时的初始化顺序:先父类,后子类

    父类静态代码块,子类静态代码块,父类构造块,父类构造方法,子类构造块,子类构造方法

    所以static中不能用super关键字。

二.多态

  1.只需记住一句话:父类引用指向子类对象

  Animal m=new Pig("佩奇");

  2.再记住一句话:收到统一消息,作出不同响应。

    比如动物都有叫的方法,小猪和小鸟叫声不同,此时它们重写了父类叫声的方法

  3.多态的绑定机制

  • 函数调用与函数本身的关联,以及成员访问与变量内存地址间的关系,称为绑定
  • 属性有多态,方法没多态。
  • 把一个方法与它所在的类关联起来,叫做方法的绑定
  • 分为:前期绑定(静态绑定)和后期绑定(动态绑定)
  • 静态绑定:final private static 修饰的方法和构造函数,属于父类的静态绑定,程序无需运行,无需实例化对象,就能知道这个方法的具体内容
  • 动态绑定:程序运行过程中,根据具体的实例对象才能确定,即为:子类重写后的方法
  • 总结:编译器:静态绑定,运行期:动态绑定
  • 属性属于静态绑定,子类不能改变

  4.final修饰的

  • 当final修饰属性,只能赋值一次,不能被修改
  • 修饰方法,不能被重写,可以被重载
  • 修饰类:该类不能被继承

    

猜你喜欢

转载自www.cnblogs.com/anzhilanxiao/p/10583482.html
今日推荐