多态的理解与使用

  • Post author:
  • Post category:其他


一、概述

1、面向对象程序设计的三大支柱是封装、继承和多态。

2、对于多态的基础理解:

事物存在多种形态,现实事物经常会体现出很多种形态。例如猫属于猫科动物,狗属于犬科动物,但猫与狗都是属于动物,但同时他们也分别属于自己的动物类别,如此看来,这就体现了动物表现出的多种形态。这样的介绍有助于我们去理解Java中的多态。

3、Java作为面向对象的语言,同样可以描述一个事物的多种形态。例如,Cat类继承了Animal类,一个Cat的对象既是Cat,也是Animal。

4、多态意味着父类型的变量可以引用子类型的对象。

5、多态是同一个行为具有多个不同表现形式或形态的能力;多态就是同一个接口,使用不同的实例而执行不同操作。

6、多态一般分为两种:重写式和重载式多态

二、背景知识

1、继承关系使一个子类能继承父类的特征,并且附加一些新特征。子类使它的父类的特殊化,每个子类的实例都是其父类的实例,但是反过来不成立。例如:每个圆都是一个几何对象,但并非每个几何对象都是圆。因此,总可以将子类的实例传给需要父类型的参数。

2、实现多态的前提条件:

(1)继承的存在,继承是多态的基础,没有继承就没有多态。

(2)子类重写父类的方法,多态下会调用子类重写后的方法。

(3)父类引用变量指向子类对象,涉及子类到父类的类型转换。

三、详述

1、向上转型和向下转型

(1)向上转型

将一个父类的引用指向一个子类对象,自动进行类型转换。

使用格式:	
父类类型 变量名 = new 子类类型();
如:Animal a = new Cat();

注意:

a.向上转型不要强制转型。

b.父类引用指向的或者调用的方法是子类的方法,这个称为动态绑定。

c.向上转型后父类引用不能调用子类自己的方法。

(2)向下转型

子类引用指向父类引用的子类对象,通俗的说就是子类实例对象赋值给父类引用,然后父类引用又要赋值给子类引用,这个过程就是向下转型。

使用格式:
子类类型 变量名 = (子类类型) 父类变量名;
如:Cat c =(Cat) a;

注意:

a.只能强转父类的引用,不能强转父类的对象。

b.要求父类的引用必须指向的是当前目标类型的对象。

c.当向下转型后,就可以调用子类类型中所有的成员。

(3)实例

public class Keeper {
    public void feed(Animal animal){
        animal.eat();
    }
}

public class Test {
    public static void main(String[] args) {
        Keeper GodXiu = new Keeper();

        Animal snake = new Snake();

        Animal tiger = new Tiger();
        GodXiu.feed(snake);
        GodXiu.feed(tiger);
    }
}
 

四、小结

1、多态性是面向对象编程的又一个重要特征,它是指在父类中定义的属性和方法被子类继承之后,可以具有不同的数据类型或表现出不同的行为,这使得同一个属性或方法在父类及其各个子类中具有不同的含义。

2、为什么要用多态

(1)多态的使用提高了代码的维护性;

(2)多态的使用也提高了代码的扩展性;

(3)降低了代码的耦合度。



版权声明:本文为lniiiiii原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。