多态

多态

  • 分类

    • 静态多态(编译时多态):编译时决定采取哪种方式。例如重载(同一个类中同名同返回值不同参的函数)。
      编译时类型:声明时所用的类型。
    • 动态多态(运行时多态): 运行时决定采取哪种方式。例如覆盖(父子类有同名同返回值同参的函数)。
      运行时类型:指向的对象的类型。
    • 例:Person p=new Student();
      其中Student extends Person,那么p的编译时类型是Person,运行时类型是Student
  • 动态多态的运行时绑定

    • 被隐藏的属性,子类对象被转换成父类后,访问的是父类的属性(编译时类型决定)
    • 被覆盖的方法,子类对象被转换成父类后,访问的是子类的方法(运行时类型决定)

由几个例子总结的:

  • 父类和子类有同名属性(隐藏),编译时类型和运行时类型都是子类的情况下:
    调用父类的方法,则访问父类的该属性。
    调用子类的方法,则访问子类的该属性。
    直接用.访问该对象的该属性,访问的是父类的该属性。
  • 父类和子类有同名属性和同名方法(隐藏&覆盖),编译时类型是父类而运行时类型是子类的情况下:
    对象.调用该同名方法,则调用的是子类的该方法,在方法里访问的也是子类的该属性。
    调用父类的其他方法来访问该属性,则访问的是父类的该属性。
    直接用.访问该对象的该属性,访问的是父类的该属性。

对于有static关键字的:

  • 是被所有实例所共享的
  • static方法是非虚的,以声明的类型为准(编译时类型),与实例类型无关
  • 如果父类有一个static方法/属性,且子类也有一个一模一样的static方法/属性,那么在编译时类型是父类而运行时类型是子类的情况下,调用/访问的是编译时类型的static方法/属性。

3种非虚的方法:

  1. static
  2. private(子类看不见)
  3. final(子类不能覆盖)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值