继承和多态再一次理解

继承

1.java语言中子类继承父类都继承那些数据?

  • 私有数据不支持继承。
  • 构造方法不支持继承。
  • 其他数据都可以继承。

2.java中任何类都默认继承Object类,并且任何一个类都有Object的特征。

3.什么是方法重写?

当父类中的方法无法满足当前子类的业务需求的时候,子类有必要将父类中继承过来的方法进行重写编写。这叫做方法的重写,overwrite。回忆下重载是什么?

4.满足什么条件的时候会发生方法的重写呢?

  • 方法重写发生在具有继承关系的父子俩之间。
  • 方法样子长的一样。
  • **访问权限不能更低。**也就是父类中方法是public,子类重写的时候不能变成private。
  • 抛出异常不能更多,可以更少,这个不清楚?

5.静态方法不存在覆盖。

多态

核心机制。

1.多态中的几个概念

  • 向上转型(upcasting)

    子类型转换成父类型,实际因为父类更通用,又被称为自动类型转换。

  • 向下转型(downcasting)

    强制类型转换

2.经典:父类型的引用指向子类型的对象。这句话要理解深刻要看编译阶段和运行阶段。

3.静态绑定和动态绑定。

  • 编译期绑定,静态绑定。这时候编译器检查Animal 中有move()方法,符合语法规范。

  • 运行阶段绑定,动态绑定。new 的啥底层就是啥对象,cat调用的就是啥对象的方法。

  • 无论Cat类中有没有重写move()方法,运行阶段一定调用的是Cat对象的 move方法。因为底层的真实对象就是Cat对象。

  • 由于在编译阶段和运行阶段绑定不同的形态,所以这种机制被称为多态的语法机制。

Animal cat = new Cat(); 

cat.move()//这里move调的是Cat()对象的move()方法。

4.向下转型

  • 如果调用方法只存在子类中,对象.方法会在编译阶段报错。

  • 要使用子类型中特有的方法的话,要强制类型转换。

  • 两者之前要存在继承关系,否则强制类型转换会出现运行时ClassCastExpection错误(程序可以正常编译)。

  • 怎么避免出现向下类型出现的异常呢?

    使用instanceof运算符可以避免以上错误。

    格式:引用 instanceof 数据类型名

    以上运算符的结果是boolen类型

    if(a instanceof Cat){
    	Cat c = (Cat)a;
    	c.catchMouse();
    }else if(a instanceof Bird){
        Bird b = (Bird)a;
        b.fly();
    }
    
  • 多态的作用:降低程序耦合度,提高扩展性。

  • 面向抽象编程,尽量不要面向具体编程。(需要多实践才能更深刻)

  • 6
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值