首先解释多态是什么意思
多态(Polymorphism)按字面的意思就是“多种状态”。如何实现多种状态,简单的说就是用继承(2017.10.19 目前只讲了类之间的继承,尚未涉及接口)
有一个父类叫做动物,下面有几个继承自他的子类,例如狗类,鱼类,羊驼类,鸟类。虽然这些动物都会移动,但是移动的方式不同,有飞的,有走的,有游的。但是他们同时又都是动物类,我们创建的时候想要省些力气,不能总是 子类引用 = 子类对象 。这样还怎么复制粘贴?所以我们使用多态,可以 父类引用 = 子类对象 这样我们就可以复制很多代码,甚至使用数组 节省时间了。
使用多态必须注意三点
1、 首先要有继承关系
2、子类要把父类方法重写(如果没有重写就会调用父类的方法)
3、父类引用指向子类对象 即//父类类型 对象名称 = new 子类类型()
这是最重要的一点,只有将父类引用指向子类对象,才能达到多态的效果,即动态链接。
总结:
1、该引用只能调用父类中定义的方法和变量
2、如果子类重写父类中的方法和变量。那么调用方法时,将会调用子类重写的方法。 如果子类没有重写,会调用父类本身的方法。
3、如果子类继承自父类的方法被重载,那么不调用重载后的方法。
class Animal {
public void start(){
System.out.println("我是父类的开始方法");
}
}
class Beast extends Animal{
public void start(){
System.out.println("我是跑步的");
}
}
class Bird extends Animal{
public void start(){
System.out.println("我是飞的");
}
}
class Fish extends Animal{
///我什么也没有 默认是父类的start()方法
}
public class Demo{
public static void main(String[] args) {
Animal[] animal = {new Beast(),new Bird(),new Bird(),new Fish()};
for (int i = 0; i < animal.length; i++) {//遍历数组
animal[i].start();//调用每个对象start方法
}
}
}
/*
*结果如下
*我是跑步的
*我是飞的
*我是飞的
*我是父类的开始方法
*/