多态: 字面上的理解,多种形态有多种形式:方法的重写、方法的重载 对象也存在多种形式 多态语法 父类类名 对象名 = new 子类类名() Animal cart =new Cart(); 这种写法叫做父类指向子类对象 多态前提:类之间要有继承关系
多态的特征: 在多态情况下: 子父类中都有同名的静态方法是,调用同名静态方法应该注意: 编译看左边,运行看右边 子父类中都有同名的非静态方法时,调用同名非静态方法是应注意: 编译看左边,运行看右边 子父类中都有同名属性(静态和非静态)时,调用同名属性(静态和非静态)应该注意: 编译看左边,运行看左边 变量是不存覆盖的,只有方法才能覆盖 好处:提高代码的重用性,便于维护
多态的缺点 多态后不能调用子类特有的(只有子类中有,父类中没有的方法)方法 解决办法 向上转型(上塑造型): 子类猫转成了父类型(动物) Animal an=new Cat(); 向下转型(下塑造型): 父类型(动物)转成了子类型(猫) Animal an=new Cat(); Cat c=(Cat)an; 向下转型注意:Animal an=new Cat(); Dog dog=(Dog)an;错误的 Animal an =new Animal(); Dog dog=(Dog)an;错误的 如:猫是动物的一种,但是动物不单单是猫 会报类型转换异常:java.lang.ClassCastException
多肽类型的判断instanceof instanceof 运算符是用来在运行时指出对象是否是特定类的一个实例 语法:对象 instanceof 类 返回值 boolean public static void method(Animal an){ Animal an=new Cat(); Animal an=new Dog(); if(an instanceof Cat){ Cat cat=(Cat)an; cat.catchMouse();//特有方法,只属于猫 } if(an instanceof Dog){ Dog dog=(Dog)an; dog.LookHome();//特有方法,只属于狗 } an.eat();//不是特有方法 }
