一、多态
多态是同一个行为具有多个不同表现形式或形态的能力。
多态在代码中的体现:父类或者接口的引用指向其子类的对象。
特点:
1.成员变量:
编译时:参考引用型变量所属的类中是否有调用的成员变量,有,编译通过,没有则编译失败。
运行时:参考引用型变量所属的类中是否有调用的成员变量,并允许该所属类的成员变量
(编译,运行都看左边)
2.成员函数:
编译时:参考引用型变量所属的类中是否有调用的成员函数,有,编译通过,没有则编译失败。
运行时:参考的时对象所属的类中是否有调用的函数。
(编译看左边,运行看右边)
3.静态函数:
编译时:参考引用型变量所属的类中是否有调用的静态方法。
运行时:参考引用型变量所属的类中是否有调用的静态方法。
(编译和运行都看左边)
例如:
public abstract class Animal { abstract void eat(); } public class Cat extends Animal{ public void eat(){ System.out.println("吃鱼"); } public void catchMouse(){ System.out.println("抓老鼠"); } } public class Dog extends Animal{ public void eat(){ System.out.println("吃肉"); } public void seeHome(){ System.out.println("看家"); } } public class DuoTaiDemo { public static void method(Animal a){ a.eat(); } public static void main(String[] args) { method(new Cat()); //Animal a = new Cat();
// } }
多态的好处:提高了代码的扩展性,前期定义的代码可以使用后期的内容
多态的前提:
(1).类与类之间必须存在关联,继承或者实现关系
(2).要有覆盖关系。
2.转型
向上转型:
当使用Animal a = new Ca(); 时,猫的对象提升为动物类型,但是猫类的特有功能无法访问
其作用就是限制对特有功能的访问。也称为向上转型。
向下转型:
当需要使用猫类的特有功能时,需要进行向下转型
Cat c = (Cat)a;
public class DuoTaiDemo { public static void method(Animal a){ a.eat(); } public static void main(String[] args) { method(new Cat()); Animal a = new Cat(); Cat c = (Cat)a; //向下转型 c.catchMouse(); } }
可以再其中添加类型判断instanceof,用于判断是否输入某个类型
例如:
public static void method(Animal a){ a.eat(); if(a instanceof Cat){ //添加类型判断 Cat c = (Cat)a; c.catchMouse(); } }
原文:https://www.cnblogs.com/gmangofight/p/14589322.html