JAVA的三个最基本特征:继承、封装和多态,今天着重分析下多态(Polymorphism)。
对于多态,我们用以下一句话理解足矣:
父类或者接口类型的引用指向子类或者实现该接口的类的对象。
接口里面只有方法声明,没有具体实现。
package com.code; public class PolymorphismTest { public static void main(String[] args) { Parent p = new Child(); p.eat(); } } class Parent { void eat() { System.out.println("Parent Eat"); } } class Child extends Parent { @Override void eat() { System.out.println("Child Eat"); } }
package com.code; public class PolymorphismTest { public static void main(String[] args) { Eat x = new Animal(); x.HowToEat(); } } interface Eat { void HowToEat(); } class Animal implements Eat { public void HowToEat() { System.out.println("Animal Eat"); } }
另外,多态是一种运行时行为,不是编译时行为。
我们可以通过以下程序进行验证:
package com.code; import java.util.Random; public class PolymorphismTest { public Parent doSomething() { Random random = new Random(); int x = random.nextInt(3); switch(x) { case 0: return new Child1(); case 1: return new Child2(); case 2: return new Child3(); } return null; } public static void main(String[] args) { PolymorphismTest pt =new PolymorphismTest(); pt.doSomething(); } } class Parent { } class Child1 extends Parent { public Child1() { System.out.println("Child1"); } } class Child2 extends Parent { public Child2() { System.out.println("Child2"); } } class Child3 extends Parent { public Child3() { System.out.println("Child3"); } }
此程序在运行之前,程序是不知道父类的引用究竟指向了哪个子类的,只有在运行时才知道具体指向哪个子类。因此,多态是一种运行时行为,而不是编译时行为。
另外,很多有关JAVA的教科书都有一句错误的理解,认为方法重载和方法重写都是多态。其实不然,在think in java中已经明确指出了这句话不对。
在Java中,方法重载重载不是多态,方法重写才是多态。
方法重载发生在一个类中的不同方法上,而方法重写才发生在父类与子类上。
相关推荐
java 笔记, 讲解多态 面向对象
内容为本人学习java多态封装时整理的基础知识笔记,内容包括java中的多态和封装
java的编译时多态和运行时多态,保证一看就会
java封装 继承与多态 程序设计 类与对象
深入Java核心 Java中多态的实现机制
java多态的基础知识,你可能了解,但是如何使用?内附例子。究竟如何实现,帮你学习基础。
Java多态的讲解
Java学习笔记(到多态部分)
JAVA学习笔记,java知识点总结
java 实验 继承与多态rectAngle 定义矩形类,用户输入矩形的长与宽,程序计算其面积和周长;派生子类正方形类,定义一个接口Printable源代码
java多态、继承练习题,包含题目与答案,............................................................................................................
内容概要: 本文介绍了Java中多态...建议通过阅读相关的Java教材或搜索资料,进一步了解与多态相关的高级主题,如抽象类和接口等内容。 如有疑问,可以参考Java官方文档或向技术论坛寻求帮助,进一步加深对多态的理解。
java基础_继承封装 多态,概念的梳理,对初学者很有帮助,看一遍就清楚了
Java(继承与多态)
JAVA封装继承与多态PPT教案学习.pptx
java 继承和多态PPT教程
javaJava的继承与多态PPT教案学习.pptx
C++重点复习题(多态和继承).doc
深入Java核心Java中多态的实现机制.pdf