Java OOP之多态
来源:互联网 发布:淘宝网抓绒布料 编辑:程序博客网 时间:2024/06/05 03:10
面向对象三大特性 : 继承、封装、多态。
什么是多态? 可以理解成 对象的多种形态。(细胞的分化其实就是一种多态)
在Java语言中,我觉得可以从下面两个方法来理解多态的概念。(班门弄斧下^_^)
一、引用多态
1)父类的引用可以指向本类
2)父类的引用可以指向子类对象
注意 : 不能使用子类的引用指向父类对象。
//父类的引用可以指向本类的对象 Animal obj = new Animal(); //父类的引用可以指向子类的对象 Animal obj1 = new Dog(); // 这是错误的,不能使用子类的引用指向父类对象 //Dog obj2 = new Animal();
二、方法多态
1) 创建本类对象时,调用的方法为本类方法
2)创建子类对象时,调用的方法为子类重写的方法或者继承的方法(非静态)。
注意 : 父类的引用不能调用子类独有的方法。如果想调用子类独有的方法,要先判断是否可以转化成子类引用。详见这里
描述一个场景 :
创建一个Animal类,并定义个eat()方法,在该方法中输出”动物具有吃的能力”;
创建一个Animal的子类Dog类,重写eat()方法,在该方法中输出”狗是啃骨头的” 还有playDog()方法
创建一个Animal的子类 Cat类
//父类的引用可以指向本类的对象 Animal obj = new Animal(); //父类的引用可以指向子类的对象 Animal obj1 = new Dog(); // 父类的引用可以指向子类的对象 Animal obj2 = new Cat(); // 这是错误的,不能使用子类的引用指向父类对象 //Dog obj2 = new Animal(); // 创建本类对象时,调用的方法为本类方法 obj.eat(); // 创建子类对象时,调用的方法为子类重写的方法或者继承的方法 obj1.eat(); obj2.eat(); // 下面这个也是错误的 引用变量 在编译阶段 只能调用 其编译阶段时类型所具备的方法,但是在运行时则执行它运行时方法 //obj1.playDog();
输出结果:
动物具有吃的能力狗是啃骨头的动物具有吃的能力
备注: 继承是实现多态的基础。
注意 : 对象的属性不具备多态性。也就是说,当父类和子类的属性出现同名时,用父类引用指向子类对象时,用父类引用访问成员属性,得到的是父类的属性值。
最后一点 : 如果是静态方法,那么直接调用引用类型的方法(作为了解)进一步解释下,也作为笔记吧,在Java中,方法区分为静态和非静态。静态区的成员(方法和变量) 跟类是静态绑定的,也就是说只能通过类名去访问。而在非静态区,是动态的(this、super)去调用方法的。总结出来就一句话 : 多态中,静态参考引用所属即可。
demo地址: http://download.csdn.net/download/qq_18505715/9847912
- Java OOP之多态
- JAVA—OOP之多态
- OOP之多态 【C#】
- OOP之多态的艺术
- OOP的三个核心本质之多态
- oop之多态特性的应用实例
- java之多态,
- java之多态
- java学习之多态
- java基础之多态
- Java之多态
- Java学习之多态
- Java学习之多态
- java基础之多态
- Java学习之多态
- Java学习之多态
- JAVA之多态
- java之多态
- 安卓手机无法root的情况下使用busybox
- 数据结构C语言版--单链表的基本功能实现
- UVa1368 DNA Consensus string AC
- OkHttp3 Interceptor 拦截器的使用 统一追加参数
- 神经网络和CNN的一些基础概念,基础知识的梳理
- Java OOP之多态
- 线程
- Q-Prime Ring Problem
- 判断一个div是否在屏幕外
- How To Use Google Logging Library (glog)
- HTML基础知识
- Settimeout 设置以后,可以用cleartimeout清除。
- 网易2016招聘<路灯>Java代码
- node.js部署之启动后台运行 forever