对java中对多态的简单理解

多态即多种形态,通俗来讲就像一个人有不同身份,比如说人:生物,地球人,中国人,学生,等等。

使用多态的前提:
 1.必须有子父类关系 (必须有继承)
 2.必须有方法的重写


 多态在java中表现形式:
 父类类型 变量名 = new 子类类型();
 即父类类型的变量 指向了 子类的对象

多态调用成员变量时,编译运行都看父类
多态调用成员方法时,编译看父类 运行看子类

在这里说一下在多态中的重要的知识点:向下转型和向上转型多态就是向上转型

使用了多态后,可以调用该子类重写了父类的方法,但是子类特有的方法是不能调用的(多态的弊端)

解决多态的这个弊端的办法是向下转型,也就是进行强制类型转换

向下转型也有弊端:
把父类的变量 转成子类类型的时候 编译器会直接编译通过,但是编译运行的时候会报错

比如说下面代码写的时候是没有问题的,运行后报错:Dog cannot be cast to Cat

package com.polymorphic.test;

public class polymorphictest {

    public static void main(String[] args) {
        Animal an = new Dog();            //一个类型是animal的Dog
        feedanimal.feedanimal(an);         
        Cat cc =(Cat)an;                 //向下强制转型成cat,实际上an是Dog
        cc.catchmouse();
}
}


 java中解决向下转型弊端的方法:
 一个关键字 instanceof 运算符

 作用: 判断某一个变量 是不是 该类的类型

即在转换前做一个类型判断
比如:

package com.polymorphic.test;

public class polymorphictest {

    public static void main(String[] args) {
        Animal an = new Dog();        
        feedanimal.feedanimal(an);    
        
        if(an instanceof Dog){
            Dog dd =(Dog)an; 
            dd.WatchHome();
            dd.eat();
        }
        if(an instanceof Cat) {
            Cat cc =(Cat)an;
            cc.catchmouse();            
        }
    }
原文地址:https://www.cnblogs.com/txbblog/p/10313771.html