Java_类与对象06_多态

1.     多态:父类声明,子类创建。

2.     多态的前提:

  A:要有继承关系

  B:要有方法重写。

    其实没有也是可以的,但是如果没有这个就没有意义。

  C:要有父类引用指向子类对象。

    父 f =  new 子();

3.     多态时只能调用父类的成员

  a)    多态时调用的成员变量一定为父类的成员变量

  b)    多态时调用的成员方法:

    i.      如果子类没有重写此方法,调用的是父类的方法。

    ii.     如果子类重写了父类的方法,调用的是子类的方法

  c)     多态时调用的构造方法:

    创建子类对象的时候,访问父类的构造方法,对父类的数据进行初始化。

  d)    多态时调用的static方法

    static方法不能产生重写。现象像重写但不是重写,如果子类“重写”static方法,依然调用父类的方法。

  

  

4.     多态的好处:

  A:提高了代码的维护性(继承保证)

  B:提高了代码的扩展性(由多态保证)

5.     多态的弊端:不能使用子类的特有功能。

  我就想使用子类的特有功能?行不行?

    行。

  怎么用呢?

    A:创建子类对象调用方法即可。(可以,但是很多时候不合理。而且,太占内存了)

    B:把父类的引用强制转换为子类的引用。(向下转型)

  对象间的转型问题:

    向上转型:父类引用指向子类对象(父类声明,子类创建)

      Fu f = new Zi(); //f是子类型,外界看到的是父类型

    向下转型:父类引用转为子类对象

      Zi z = (Zi)f; //外界看到的是父类型,强转成子类型后,外界看到是子类型。要求该f必须是能够转换为Zi的,也就是说f本身就是Zi,所以才能转。

  

6.    引用数据类型的类型转换

  a)    引用数据类型比较大小:父类大,子类小。

  b)    子类可以直接赋给父类。

  c)    父类必须强转才能赋给子类。

  d)    当父类的引用指向的实例,不是需要的子类类型,则运行时发生异常。

  e)    当两个类没有继承关系时不能相互转换,否则编译失败。

7.     java.lang.Object类:

  a)    是JAVA中所有类的父类。

  b)    toString():当输出一个类的对象时,或将类的对象与字符串连接时。JVM会自动调用类的toString().

  c)    ==与equals()

    i.      ==:判断栈中的内容是否相等。基本数据类型比较的是值是否相等。引用数据类型比较的是引用是否相等。

    ii.     equals():判断当前对象与指定对象是否相等(判断堆中的内容是否相等)。equals()最早出现在Object类中,Object中的equals()仍然判断栈中的内容是否相等。如果自定义的类需要判断是否相等时,建议重写Object类中的equals()方法

猜你喜欢

转载自www.cnblogs.com/zhaolanqi/p/9235021.html
今日推荐