Java 多态

来源:互联网 发布:wp 利用 知乎 编辑:程序博客网 时间:2024/06/10 02:51
/*class 动物{}class 猫 extends 动物{}class 狗 extends 动物{ }猫 x =new 猫();动物 x= new 猫();// 一个对象两个形态猫这类事物既具备猫的形态 又具备作着动物的形态这就是对的多态性 简单的说 就是一个对象对应着不同的类型 父类或者接口的引用指向其子类的对象多态的好处:提高了代码的扩展性  前期定义的代码可以使用后后期的内容多态的弊端:前期定义的内容不能调用(使用)后期子类的特有内容多态的前提:必须有关系 继承 实现必须有覆盖*/ abstract class Animals{ abstract void eat(); } class Dog extends Animals{ void eat(){ System.out.println("啃骨头"); } void lookHome(){ System.out.println("看家"); }} class Cat extends Animals{ void eat(){ System.out.println("吃鱼"); } void CatchMouse(){ System.out.println("抓老鼠"); }  }   class DuoTaiDemo{ public static void main(String[] args) {Animals a=new Cat();//自动类型提升,猫对象提升为了动物类型 但(猫)特有功能无法访问//作用就是限制特有功能的访问(只需要动物的功能 不需要特有的猫狗类型)//专业术语 : 向上转型。将子类隐藏就不能使用子类的特有方法a.eat(); //如果还想用具体动物猫的特有功能//可以将该对象向下转型Cat c=(Cat)a;//向下转型是为了使用子类中的特有方法c.eat();c.CatchMouse(); //注意对于转型 自始至终都是子类对象在做着类型变化 /*Cat c =new Cat(); //c.eat(); Dog d=new Dog(); method(c); method(d);*/ } public static void method(Animals c){  c.eat(); if(a instanceof Cat){//instanceof:用于判断对象的具体类型 只能用于引用数据类型的判断 //通常在向下转型前用于健壮性的判断增强代码的健壮性 Cat c =(Cat)a; c.CatchMouse() } else if(a instanceof Dog){ Dog d =(Dog)a; d.lookHome(); } } } 

原创粉丝点击