Java的多态

来源:互联网 发布:js判断ie浏览器版本 编辑:程序博客网 时间:2024/06/12 16:58

定义:某一类事物的多种存在形态。

比如说猫这类事物既具有猫的形态,也具有动物的形态,这就是事物的多态性。

简单说:就是一个对象对应不同的类型。

多态在代码中的体现:父类或者接口的引用指向其子类的对象。

动物 x=new猫();//一个对象,两种形态。

动态的好处:提高了代码的重用性。前期定义的代码可以使用后期的内容。

多态的弊端:前期定义的内容不能使用(调用)后期子类定义的特有内容,比如Animals中没有看门的方法,后期狗的子类中所定义的看门方法不能使用。

多态的前提:1.子类与父类必须有关系,要么继承要么实现。

  2.要有覆盖。

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("抓老鼠");}}public class DuoTaiDemo {public static void main(String[] arge){Animals a=new cat();//cat既属于猫,也属于动物a.eat();Animals b=new dog();   //自动类型提升,猫对象提升成了动物类型,但是特有功能无法访问,作用就是限制对特有功能的访问。b.eat();}  public static void method(Animals c){c.eat();}}

}

当自动类型转换后如果还想有具体动物的特有功能,可以将对象进行向下转换。

Animals a=new cat();//cat既属于猫,也属于动物a.eat();cat c=(cat)a;//向下强制转换c.catchmouse();

多态时,成员的特点

1.成员变量

编译时,参考引用型变量所属的类中是否有调用的成员变量,如果有,编译通过;如果没有,编译失败。

运行时,参考引用型变量所属的类中是否有调用的成员变量,并运行所属类中的成员变量。

简单说,就是编译和运行都参考等号左边的类。在例子中即为animalsanimalsa=new cat())

2.成员函数

编译时,参考引用型变量所属的类中是否有调用的函数,如果有,编译通过;如果没有,编译失败。

运行时,参考对象所属的类中是否有调用的函数。

简单说,编译看左边,运行看右边。

3.静态函数

编译时,参考对象所属的类中是否有调用的函数。

运行时,参考对象所属的类中是否有调用的函数。

简单说,编译都运行都看左边。

其实对于静态方法来说是不需要对象的,直接用类名调用即可。




原创粉丝点击