欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

继承和多态再一次理解

程序员文章站 2022-03-03 12:39:24
...

继承

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();
    }
    
  • 多态的作用:降低程序耦合度,提高扩展性。

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