多态的详细介绍
来源:互联网 发布:关于网络的手抄报图片 编辑:程序博客网 时间:2024/05/01 04:51
多态: 定义:某一类事物的多种存在形态列:动物中 猫 狗; 猫这这个对象对应的类型是猫类型; 猫 a = new 猫(); 同时猫也是动物中的一种,也可以把猫称为动物; 动物 b = new 猫(); 动物是猫和狗具体事物中抽取出来的父类型 父类型引用指向子类型对象。对象的多态性: class 动物{ class 猫 extends 动物{} class 狗 extends 动物{} 猫 a = new 猫(); 动物 b = new 猫();//一个对象两种形态 猫这类事物即具备猫的形态又具备动物的形态,也就算对象的多态性; 简单的说:就是一个对象对应着不同的类型; 多态在代码中的体现: 父类或者接口的引用指向其子类对象 多态的好处: 提高了代码的扩展性,前期定义的代码可以使用后期定义的内容; abstract class Animal{ abstract void eat();} class Dog extends Animal{ void eat(){ System.out.println("啃骨头"); } void lookHome(){ System.out.println("看家"); }} class Cat extends Animal{ void eat(){ System.out.println("吃鱼"); } void catchMouse(){ System.out.println("抓老鼠"); }} class DuoTaiDemo{ public static void main(String[] args){ Cat c = new Cat(); Dog d = new Dog(); Animal a = new Dog(); method1(a); method1(c); method1(d); } public static viod method1(Animal a){ a.eat(); a.catchMouse();//编译报错,动物里没有抓老鼠的方法。 }}《多态的弊端: 前期定义的内容不能调用后期子类中特有的内容。 多态的前提: 1:必须有关系 :继承 实现 。 2:要有覆盖。》 if(a instanceof Cat){ Cat c = (Cat)a; c.catchMouse();/*java 中的instanceof 运算符是用来在运行时指出对象是否是特定类的一个实例。instanceof通过返回一个布尔值来指出,这个对象是否是这个特定类或者是它的子类的一个实例。用于判断对象的具体类型,只能用于引用数据类型判断,通常在向下转型前用于健壮性判断;*/ } Animal a = new Cat();//自动类型提升猫对象,提升了动物类型,但是特有的功能无法访问 //作用就是限制了对特有功能的访问; //专业上讲:向上转型将子类型隐藏,就不使用子类的特有方法; //如果还想使用具体动物猫的特有功能,可以将该对象进行向下转型; //向下转型的目的是为了使用子类中的特有方法。 a.eat(); Cat c = (Cat)a; c.eat(); c.catchMouse();/*注意:对于转型,自始至终都是子类对象在做着类型的变化(如小猫转动物,小猫转小猫)Animal an = new Dog();Cat c = (Cat)an;错误:报classCatException 类型转换异常*/class 毕姥爷{ viod 讲课(){ System.out.println("管理课"); } viod 钓鱼(){ System.out.println("钓鱼"); }}class 毕老师 extends 毕姥爷{ viod 讲课(){ System.out.println("java"); } viod 看电影(){ System.out.println("无间道"); }}class DuoTaiDemo{public static void main(String[] args){ //毕老师 b = new 毕老师(); // b.讲课(); // b.看电影(); 毕姥爷 bl = new 毕老师(); bl.讲课(); -----------System.out.println("java"); bl.钓鱼(); -----------System.out.println("钓鱼"); // bl.看电影(); 错误 }}多态时 成员的特点:1,成团变量: 编译时参考引用型变量所属的类中是否有调用的变量,有,编译通过;没有,编译失败; 运行时参考引用型变量所属的类中是否有调用的变量,并运行该属性类中的成员变量; 简单说:编译和运行都参考等号的左边。2,成员函数: 编译时参考引用型变量所属的类中是否有调用的函数,有,编译通过;没有,编译失败; 运行时参考的是对象所属的类中是否有调用的函数; 简单说:编译看左边,运行看右边。3,静态函数: 编译时参考引用型变量所属的类中是否有调用的静态方法; 运行时参考引用型变量所属的类中是否有调用的静态方法; 简单说:编译和运行都看左边。 <!--静态方法是不需要对象的,直接类名调用即可-->---------------------------------------成员变量:class Fu{ int num = 3;}class Zi extends Fu{ int num = 4;}class DuoTaiDemo{public static void main(String[] args){ Fu f = new Zi(); System.out.println(f.num);//运行结果等于3 编译和运行都看左边 }}------------------------------------------成员函数:class Fu{ void Show(){ System.out.println("fu show"); }}class Zi extends Fu{ void Show(){ System.out.println("zi show"); }}public static void main(String[] args){ Fu f = new Zi(); f.show();//运行结果等于"zi show" 编译看左边和运行看右边 }}
0 0
- 多态的详细介绍
- Java 多态实现的详细介绍
- css3的详细介绍
- LDAP的详细介绍
- LDAP的详细介绍
- 指针的详细介绍
- tomcat的详细介绍
- log4j的详细介绍
- JNDI的详细介绍
- 管道的详细介绍
- FINDCONTROL的详细介绍
- clientdataset的详细介绍
- usb_hub_descriptor的详细介绍
- FINDCONTROL的详细介绍
- Python的详细介绍
- servlet的详细介绍
- AsyncTast的详细介绍
- JavaBean 的详细介绍
- KMP算法
- css3中的边框相关样式
- 15、 EXTJs前后台交互
- 如何在Android Studio中添加多个项目
- PHP随机显示mysql数据库中的数据
- 多态的详细介绍
- 涨姿势!x86处理器兼容ARM架构App的秘密
- JVM内存划分
- 【Redis源码剖析】 - Redis内置数据结构之字符串sds
- Json 和 Jsonlib 的使用
- C++将结构体传给lua
- 动态分析maillog日志,把恶意链接直接用防火墙禁止
- Nginx源码分析(2)之——共享内存管理之slab机制
- IntelliJ IDEA 14.x 与 Tomcat 集成,创建并运行Java Web项目