小杰作为一个刚刚入门的萌新程序猿,刚刚结束为期三周的Java教学,因老师需赶回澳洲,时间仓促有很多问题小杰并未请教。关于Java的多态和继承也一直存在疑惑,现在小杰就想谈谈目前对他们的认识。

    小杰认为,多态、继承和重写是相辅相成的,继承是多态的基础,多态是有了继承后功能的延伸,而重写方法则是具体实现的工具。在Java中多态的使用规则也决定了这些关系:

1. 使用多态必须先有继承。    我们在例子中用Cat、Dog、extends Animal.

2. 使用父类引用指向子类对象。    例如:Animal cat = new Cat();     

        【1】子类是不能指向父类的。

        【2】我们可以通过上下转型来改变引用类型

3. 利用在子类中重写父类方法实现多态:

        【1】对象只能调用子类从父类那继承来的方法,而不能调用子类特有的方法。

        【2】对象调用顺序是先在子类中寻找,如果子类中没有再向上检索。

    多态的最终目的是用同一种方法在面对不同对象或事件的时候执行不同的结果,即方法的多种状态。选取一段简单的代码进行简要解释。

java 方法重写原则 java中方法重写_java 方法重写原则

    我们可以看到,这段程序中的Cat和Dog类首先与Animal形成了继承关系,两个类分别重写了Animal中的 public void eat();方法,并且在两个类中又分别添加了一个特有的方法。

    我们跟随main();函数运行,他首先分别以Cat和Dog的形式调用了show();根据show();函数会先执行eat();再通过instanceof关键字来判断该对象的类型,并执行work();所以前两行的打印结果应该是“吃鱼”“抓老鼠”,“吃骨头”“看家”。

    Animal a = new Cat();就是利用Animal引用指向了Cat类。并用类型为Animal的 a 调用了子类方法,这就是典型的多态。故执行结果为“吃鱼”“抓老鼠”。

    最后我们总结一下:
1. 不管是向上转型,还是向下转型,我们涉及到的都是子类和父类的问题,也就是说多态必须存在继承关系

2. 正如上面所说,多态就是多种形态。也就是说,当我们需要实现多态的时候,就需要有父类的方法被子类重写。否则,如果没有重写的方法,就看不出多态的特性,一切按照父类的方法来,还不如不要继承,直接在父类中添加相应的方法,然后在实例化好了

3. 不管是向上转型还是向下转型,都有一个共性,就是父类指向子类对象。如果没有这个,也就没有了多态。