JAVA中同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果,这就是多态性。简单的说:就是用基类的引用指向子类的对象(或子类的对象赋给父类的引用)。
可以理解为一个事物的多种形态,比如说打印机,在平常我们会把彩色打印机、黑白打印机都叫做打印机,而彩色打印机、黑白打印机就叫做打印机的多种形态。将打印这个操作分别用于彩色打印机、黑白打印机,就可以产生不同的打印效果。
图示:
二、使用多态性有什么好处- 应用程序不必为每一个派生类编写功能调用,只需要对抽象基类进行处理即可。大大提高程序的可复用性。———>具体应用:继承
- 派生类的功能可以被基类的方法或引用变量所调用,这叫向后兼容,可以提高可扩充性和可维护性。(多态的真正作用)
使用多态的前提
- ① 类的继承关系
- ② 方法的重写
有了对象的多态性以后,我们在编译期,只能调用父类中声明的方法,但在运行期,我们实际执行的是子类重写父类的方法。
总结:编译,看左边;运行,看右边。
四、多态的举例首先定义Animal类,其中有run方法
public class Animal {
public void run(){
System.out.println("动物可以运动");
}
}
再定义Fish类,继承于Animal类,再重写Animal的run方法
public class Fish extends Animal{
public void run(){
System.out.println("鱼可以游");
}
}
再定义Dog类,继承于Animal类,再重写Animal的run方法
public class Dog extends Animal{
public void run(){
System.out.println("狗可以跑");
}
}
在测试类中测试
public class MyTest {
public static void main(String[] args) {
Animal dog = new Dog();
Animal fish = new Fish();
dog.run();
fish.run();
}
}
可以看到下面的结果
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-u9TzSZFp-1639562823374)(C:Users11425AppDataRoamingTyporatypora-user-imagesimage-20211215180315602.png)]
可以发现虽然我们定义的都是Animal类,但是执行的都是子类的方法,这就是多态的体现。
五、instanceof的使用:① a instanceof A:判断对象a是否是类A的实例。如果是,返回true;如果不是,返回false。
② 如果 a instanceof A返回true,则 a instanceof B也返回true.其中,类B是类A的父类。
的实例。如果是,返回true;如果不是,返回false。
② 如果 a instanceof A返回true,则 a instanceof B也返回true.其中,类B是类A的父类。
③ 要求a所属的类与类A必须是子类和父类的关系,否则编译错误。



