多态
多态
定义:某一类事物的多种存在的形态
例:动物中猫,狗
猫这个对象对应的类型是猫类型
猫x=new 猫();
同时猫也是动物中的一种,也可以把猫称为动物
动物 y=new 猫();
动物是猫和狗具体事物中抽取出来的父类型
父类型引用指向了子类对象
1、多态的体现
父类的引用指向了自己的子类对象
父类的引用也可以接受自己的子类对象
2、多态的前提
必须是类与类之间有关系,要么继承,要么实现
3、多态的好处
多态的出现大大的提高程序的扩展性
4、多态的弊端
提高扩展性,但是只能使用父类的引用访问父类中的成员
5、多态的应用
6、多态的出现代码中的特点(多态使用的注意事项)
在编译时期:参阅引用型变量所属的类中是否有调用方法,
如果有,编译通知,没有编译失败
在运行时期:参阅对象所属的类中是否有调用方法
简单总结就是:成员函数在多态调用时,编译看左边,运行看右边
在多态中,成员变量的特点:
无论编译和运行,都参考左边(引用型变量所属的类)。
在多态中,静态成员函数的特点:
无论编译和运行,都参考左边
[java] view plaincopy
package chapter04;
//定义一个抽象类 Animal
abstract class Animal
{
int num=5;
abstract void eat();
//void eat(){}
public void sleep()
{
System.out.println("晚上睡觉");
}
public static void speak()
{
System.out.println("听见动物叫");
}
}
//对Animal类的对象或者子类对象进行操作
class DoAnimal
{
public static void doAnim(Animal anim)
{
anim.eat();
anim.sleep();
anim.speak();
}
}
//Animal的子类Cat,在其中实现抽象方法eat(),覆盖方法sleep(),覆盖静态方法speak()。
class Cat extends Animal
{
int num=88;
public void eat()
{
System.out.println("吃鱼");
}
public void sleep()
{
System.out.println("白天睡觉");
}
public static void speak()
{
System.out.println("听见猫叫");
}
}
//Animal的子类Dog,在其中实现抽象方法eat(),覆盖静态方法speak()。
class Dog extends Animal
{
public void eat()
{
System.out.println("吃骨头");
}
public static void speak()
{
System.out.println("听见狗叫");
}
}
class MultiDemo
{
public static void main(String[] args)
{
/*
在多态中,非静态成员函数在多态调用时,编译看左边,运行看右边。
在多态中,静态成员函数的特点:无论编译和运行,都参考左边。
*/
DoAnimal.doAnim(new Cat());
DoAnimal.doAnim(new Dog());
/*
在多态中,【成员变量】的特点:无论编译和运行,都参考左边(引用变量所属的类)。
*/
Animal anim=new Cat();
System.out.println(anim.num);//结果显示为5
}
}