一、什么是多态?
多态是同一个行为具有不同表现形式或形态的能力,即对象多种表现形式的体现,就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定。
二、多态的相关知识
使用多态必须满足三个必要条件:继承、重写、父类引用指向子类。
使用多态的前提条件是必须有子父类关系。
多态体现为父类变量可以引用子类对象。
定义格式:父类类型 变量名=new 子类类型();
多态是继封装、继承之后,面向对象的第三大特性。
多态可以描述为一个事物的多种形态。如Student类继承了Person类,一个Student的对象便既是Student,又是Person。
三、多态的简单例子
参考博客代码:
https://blog.csdn.net/zhangliangzi/article/details/50097179?utm_medium=distribute.pc_relevant.none-task-blog-baidulandingword-15&spm=1001.2101.3001.4242
class Father {
public String name = "father";
//父类基本方法
public void fatherMethod()
{
System.out.println("父类的基本方法!");
}
//被子类覆盖方法
public void overrideMethod()
{
System.out.println("父类被子类覆盖方法!");
}
}
public class Child extends Father{
public String name = "child";
//子类基本方法
public void childMethod()
{
System.out.println("子类基本方法!");
}
//子类覆盖父类方法
public void overrideMethod()
{
System.out.println("子类覆盖父类方法!");
}
public static void main(String[] args)
{
//下面编译时类型与运行时类型相同,不存在多态
Father father = new Father();
System.out.println(father.name);
father.fatherMethod();
father.overrideMethod();
System.out.println();
//下面编译时类型与运行时类型相同,不存在多态
Child child = new Child();
System.out.println(child.name);
child.childMethod();
child.overrideMethod();
System.out.println();
//下面编译时类型与运行时类型不同,多态发生
//父类引用指向子类对象,多态发生条件齐全
//father2对象编译时类型是FatherClass,运行时类型是ChildClass
Father father2 = new Child();
//注意:与方法不同,对象的Field不具备多态性,下面输出的是父类的name
System.out.println(father2.name);
father2.fatherMethod();
//多态发生,此处调用的是子类重写的方法
father2.overrideMethod();
}
}