多态和反射

匿名 (未验证) 提交于 2019-12-02 23:49:02

多态是同一个行为具有多个不同表现形式或形态的能力。

多态就是同一个接口,使用不同的实例而执行不同操作。

多态存在的三个必要条件

  • 继承
  • 重写
  • 父类引用指向子类对象
public class Test {     public static void main(String[] args) {       show(new Cat());  // 以 Cat 对象调用 show 方法       show(new Dog());  // 以 Dog 对象调用 show 方法                        Animal a = new Cat();  // 向上转型         a.eat();               // 调用的是 Cat 的 eat       Cat c = (Cat)a;        // 向下转型         c.work();        // 调用的是 Cat 的 work   }                    public static void show(Animal a)  {       a.eat();           // 类型判断         if (a instanceof Cat)  {  // 猫做的事情              Cat c = (Cat)a;               c.work();           } else if (a instanceof Dog) { // 狗做的事情              Dog c = (Dog)a;               c.work();           }       }   }   abstract class Animal {       abstract void eat();   }      class Cat extends Animal {       public void eat() {           System.out.println("吃鱼");       }       public void work() {           System.out.println("抓老鼠");       }   }      class Dog extends Animal {       public void eat() {           System.out.println("吃骨头");       }       public void work() {           System.out.println("看家");       }   } 

  结果

吃鱼 抓老鼠 吃骨头 看家 吃鱼 抓老鼠反射:根据类名构建相应的对象,利用java的多态,执行不同的操作。
/* 基类 */ public class aaa {     public void func(){         return;     }      public static void main(String[] args) throws Exception {         /* 反射,通过类的名字 */         Class c = Class.forName("tryCode.ccc");         /* 实例化对象 */         aaa b = (aaa) c.newInstance();         /* output: bbb */         b.func();     } }  /* 派生类bbb */ public class bbb extends aaa {     public void func(){         System.out.println("bbb");     } }  /* 派生类bbb */ public class ccc extends aaa {     public void func(){         System.out.println("ccc");     } } 

  参考博客:https://blog.csdn.net/wwh578867817/article/details/49309789

获取类类型的方式:1、Class.forName("name")2、ClassName.class3、objectName.getClass()
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!