java中的多态性
2015-06-02 19:39
302 查看
/* 多态:可以理解为事物存在的多种体现形态。 人:男人,女人 动物:猫,狗。 猫 x = new 猫(); 动物 x = new 猫(); 1,多态的体现 父类的引用指向了自己的子类对象。 父类的引用也可以接收自己的子类对象。 2,多态的前提 必须是类与类之间有关系。要么继承,要么实现。 通常还有一个前提:存在覆盖。 3,多态的好处 多态的出现大大的提高程序的扩展性。 4,多态的弊端: 虽然提高了扩展性,但是只能使用父类的引用访问父类中的成员。 5,多态的应用 6,多态的出现代码中的特点(多态使用的注意事项) 第二个问题:如何使用子类特有方法。 */ /* 动物, 猫,狗。 */ class Cat extends Animal { public void eat() { System.out.println("吃鱼"); } public void catchMouse() { System.out.println("抓老鼠"); } } class Dog extends Animal { public void eat() { System.out.println("吃骨头"); } public void kanJia() { System.out.println("看家"); } } class Pig extends Animal { public void eat() { System.out.println("饲料"); } public void gongDi() { System.out.println("拱地"); } } //----------------------------------------- class DuoTaiDemo2 { public static void main(String[] args) { //Animal a = new Cat();//类型提升。 向上转型。 //a.eat(); //如果想要调用猫的特有方法时,如何操作? //强制将父类的引用。转成子类类型。向下转型。 ///Cat c = (Cat)a; //c.catchMouse(); //千万不要出现这样的操作,就是将父类对象转成子类类型。 //我们能转换的是父类应用指向了自己的子类对象时,该应用可以被提升,也可以被强制转换。 //多态自始至终都是子类对象在做着变化。 // Animal a = new Animal(); // Cat c = (Cat)a; /* 毕姥爷 x = new 毕老师(); x.讲课(); 毕老师 y = (毕老师)x; y.看电影(); */ function(new Dog()); function(new Cat()); } public static void function(Animal a)//Animal a = new Cat(); { a.eat(); /* if(a instanceof Animal) { System.out.println("haha"); } else */ if(a instanceof Cat) { Cat c = (Cat)a; c.catchMouse(); } else if(a instanceof Dog) { Dog c = (Dog)a; c.kanJia(); } /* instanceof : 用于判断对象的类型。 对象 intanceof 类型(类类型 接口类型) */ } }
在多态中成员函数的特点:
在编译时期:参阅引用型变量所属的类中是否有调用的方法。如果有,编译通过,如果没有编译失败。
在运行时期:参阅对象所属的类中是否有调用的方法。
简单总结就是:成员函数在多态调用时,编译看左边,运行看右边。
在多态中,成员变量的特点:
无论编译和运行,都参考左边(引用型变量所属的类)。
在多态中,静态成员函数的特点:
无论编译和运行,都参考做左边。
相关文章推荐
- Eclipse里面使用Maven搭建Web工程
- struts2学习笔记之十六(token标签)
- java学习编程练习(局域网多人聊天功能的实现)
- Jfinal开发代码碎片_导出报表_配置druid数据源_使用guava_获取当前操作系统_JDK版本_jfinal-utils_jfinal验证码
- struts2学习笔记之十五(输入校验)
- eclipse logcat只显示自己应用程序信息的设置方法
- java中关键字volatile的作用
- SpringMVC中ModelMap转换为字符串
- Scala函数---既存类型
- java控制执行流程--thinking in java学习
- java基础复习之二:Java实现同步机制是(生产消费者)
- Java图形界面设计基础
- java的串口通信
- SpringMVC源码剖析(三)- DispatcherServlet的初始化流
- SpringMVC源码剖析(四)- DispatcherServlet请求转发的实现
- SpringMVC源码剖析(二)- DispatcherServlet的前世今生
- Java 将List按照指定大小分段
- Spring中jdbcTemplate的用法实例
- SpringMVC源码剖析(一)- 从抽象和接口说起
- java学习路线图