一篇文章让你掌握多态

1.什么是多态多态的概念呢比较简单,就是同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果2.多态的必要条件为了实现运行期的多态,或者说是动态绑定,需要满足三个条件。即有类继承或者接口实现、子类要重写父类的方法、父类的引用指向子类的对象。简单来一段代码解释下:public class Parent{public void call(){sout("I m Parent");}}public class Son extends Parent{// 1.有类继承或者接口实现public void call(){// 2.子类要重写父类的方法sout("I m Son");}}public class Daughter extends Parent{// 1.有类继承或者接口实现public void call(){// 2.子类要重写父类的方法sout("I m Daughter");}}public class Test{public static void main(String[] args){Parent p = new Son(); //3.父类的引用指向子类的对象Parent p1 = new Daughter(); //3.父类的引用指向子类的对象}这样,就实现了多态,同样是Parent类的实例,p.call 调用的是Son类的实现、p1.call调用的是Daughter的实现。有人说,你自己定义的时候不就已经知道p是son,p1是Daughter了么。但是,有些时候你用到的对象并不都是自己声明的啊 。比如Spring 中的IOC出来的对象,你在使用的时候就不知道他是谁,或者说你可以不用关心他是谁。根据具体情况而定。3.多态的转型3.1 向上转型向上转型:多态本身是子类类型向父类类型向上转换的过程,这个过程是默认的。3.2 向下转型向下转型:父类类型向子类类型向下转换的过程,这个过程是强制的。3.3 为什么要转型当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误。也就是说,不能调用子类拥有,而父类没有的方法。编译都错误,更别说运行了。这也是多态给我们带来的一点"小麻烦"。所以,想要调用子类特有的方法,必须做向下转型。简单来一段代码解释下:public abstract class Animal {public String name = "123";public abstract void eat();}public class Cat extends Animal {@Overridepublic void eat() {System.out.println("猫吃鱼");}// 子类特有方法public void catchMouse() {System.out.println("猫抓老鼠");}}public class Dog extends Animal {@Overridepublic void eat() {System.out.println("狗吃狗粮");}public void watchHouse() {System.out.println("狗看家");}}定义测试类:public class test {public static void main(String[] args) {//      对象的向上转型,就是:父类引用指向之类对象。Animal animal = new Cat(); // 本来创建的时候是一只猫animal.eat(); // 猫吃鱼//      animal.catchMouse(); // 错误写法!//      向下转型,进行“还原”动作Cat cat = (Cat) animal;cat.catchMouse(); // 猫抓老鼠Dog dog = (Dog) animal;}}多态实际上是提供了另一个维度的接口与实现分离,以解耦做什么和怎么做。多态不仅能改善代码的组织,提高代码的可读性,而且能创建有扩展性的程序——无论在最初创建项目时还是在添加新特性时都可以"生长"的程序。微信号 : TestOps知乎:@TestOps云层

(0)

相关推荐