父类类型(比如Mammal)的变量指向子类(比如Cat)创建的对象,使用该变量调用父类中一个*被子类重写*的方法(比如move方法),
则父类中的方法呈现出不同的行为特征,这就是多态。

创建一个父类:

public class Mammal{Sring weight = "100KG";public void move(){System.out.println("正在快速移动");}
}

创建一个子类:

public class Cat extends Mammal{double weight = 100.0;String name = "Tom";public void eat(){System.out.println("猫咪正在吃饭");}@Overridepublic void move(){System.out.println("猫咪正在房顶上快速移动");}}

创建一个Test类,调用父类和子类中的方法:

public class Test{public static void main(String [] args){Cat cat = new Cat();//通常我们都这样调用一个方法:本类类型变量 = 本类创建的对象cat.move();//这样无论是编译还是运行都调用的是本类(即Cat类)中的方法/*但还有一种情况,那就是即将要说的多态,即 父类类型变量 = 子类创建的对象在基本数据类型一块,我们知道一个小范围、低精度的数据可以直接赋值给一个大范围、高精度的数据变量类型,例如:double x = 9;9是整型,double是浮点型,double > int;在Java的“类”中也存在类似的现象,那就是“多态”*/Mammal mammal = new Cat();//Mammal类型变量 = Cat类创建的对象mammal.move();//因为变量类型为Mammal类类型,所以编译时调用的是父类(即Mammal类)中的move方法;//又因为变量mammal指向的是子类创建的对象,所以执行时调用的是子类(即Cat类)中的move方法。//因此此处输出的结果就是://猫咪正在房顶上快速移动//这种编译和运行时调用的方法不一致的现象就叫“多态”,即多种行为状态}
}
综上可以知道“多态”有三种特点:1、编译和运行时类型不一致,否则一定不会产生多态(上面的Cat类中`Cat cat = new Cat();`就不是多态)2、被父类类型变量调用的方法一定要被子类类型重写,否则也不会出现所谓的多态3、格式:父类类型变量 = 子类创建的对象;(此时“子类创建的对象”又称为“上转型对象”)其中上转型对象的特点是:1、上转型对象只能调用被子类重写的方法,不能直接调用子类“新增”的属性和方法。例如:上面Cat类中新定义的`String name = "Tom";`和eat()方法就不能被上转型对象调用2、上转型对象如果必须调用子类“新增”的属性和方法,则必须进行下转型。在基本数据类型中,我们知道一个大范围、高精度的数据要想赋值给一个小范围、低精度的数据变量类型,则必须进行强制类型转换,例如:int x = (int)9.0;  9.0属于浮点型,x是整型变量,所以mammal进行下转型:Cat c = (Cat)mammal;此时就可以调用子类(即Cat类)“新增”的属性和方法了,例如:System.out.println("c.name"); //此时打印的就是:Tomc.eat();                   //此时输出的就是:猫咪正在吃饭3、非上转型对象不能进行下转型,例如:Mammal m = new Mammal();//不是多态,不是上转型对象Cat cc = (Cat)m;        //此种代码是错的,不能被执行4、如果子成员变量和父成员变量的名字相同(类型不一定相同),则上转型对象调用的是父类中的变量例如:父类(Mammal类)中的`Sring weight = "100KG";`和子类(Cat类)中的`double weight = 100.0;`当调用weight变量时:System.out.println(mammal.weight);//输出的是:100KG

Java的多态(详尽版)相关推荐

  1. 阿里巴巴Java开发手册详尽版和华山版下载

    更新日志: -------------- 2019.06.19日更新 -------------- 1.新增21条新规约.比如,switch的空指针问题.浮点数的比较.无泛型限制引起的类型混乱.加锁与 ...

  2. 阿里巴巴Java开发手册(详尽版)-个人未注意到的知识点

    阿里巴巴Java开发手册(详尽版)-个人未注意到的知识点 阿里巴巴Java开发手册(详尽版)1 一.编程规约 (一) 命名风格 [强制]代码中的命名只可用英文方式 [强制]类名使用UpperCamel ...

  3. 阿里巴巴Java开发手册(嵩山版)v1.7.0 及各个历史版本 百度云直接带走 不需要其他操作

    阿里巴巴Java开发手册(嵩山版)v1.7.0 阿里巴巴Java开发手册(泰山版)v1.6.0 阿里巴巴Java开发手册(华山版)v1.5.0 阿里巴巴Java开发手册(详尽版)v1.4.0 阿里巴巴 ...

  4. 新增16条设计规约!阿里巴巴Java开发手册(详尽版)开放下载!

    2019独角兽企业重金招聘Python工程师标准>>> <阿里巴巴Java开发手册>是阿里内部Java工程师所遵循的开发规范,涵盖编程规约.单元测试规约.异常日志规约.M ...

  5. HashSet中的add()方法( 五 )(详尽版)

    上接 HashSet中的add()方法( 四 )(详尽版) ,我们再重写一下equals()方法来看看是否可以不能存入相同的id: 在学生类中再重写equals()方法: public class S ...

  6. HashSet中的add()方法( 四 )(详尽版)

    上接 HashSet中的add()方法( 三 )(详尽版) ,我们重写一下Student类中的hashCode()方法来看看是否还能不能添加重复的学号了, 在学生类中重写hashCode()方法: p ...

  7. HashSet中的add()方法( 三 )(详尽版)

    上接HashSet中的add()方法( 二 )(详尽版) ,前两篇说的是泛型为String类的add()方法的具体执行过程,此后三篇说说泛型为自定义类的add()方法的具体执行过程: 首先让我们来自定 ...

  8. HashSet中的add()方法( 一 )(详尽版)

    让我们用例子来理解add()方法的底层代码吧,Let's go: import java.util.HashSet;public class Test {public static void main ...

  9. HashSet中的add()方法( 二 )(详尽版)

    本篇接着上一篇:(详尽版)HashSet中的add()方法( 一 )(详尽版) 有些东西上一篇说过了,这里就不再赘述了,具体说一下再次添加与第一次添加的区别: import java.util.Has ...

  10. Java开发手册——嵩山版(清幽现云山,虚静出内功)

    终于找到了--阿里巴巴Java开发手册1.7.0(嵩山版) 前言 <Java 开发手册>是阿里巴巴集团技术团队的集体智慧结晶和经验总结,经历了多次大规模一 线实战的检验及不断完善,公开到业 ...

最新文章

  1. LeetCode实战:子集
  2. Android stadio
  3. ARM+linux+2440嵌入式开发相关经典书籍(转)
  4. Glide-源码分析(一)
  5. hdu1247 字典树或者hash
  6. Service Mesh 和 API Gateway 关系深度探讨
  7. Scala mapValues踩坑记:谨慎使用Scala Map的mapValues, 你需要的可能是transform
  8. python列表推导式格式_Python列表推导式(for表达式)及用法
  9. Swagger与Springboot集成restful进行接口测试
  10. 和宝塔可以同时安装吗_服用钙拮抗剂可以同时补钙吗
  11. 前车之鉴-web2.0网站架构失败案例与解决方案
  12. Android-Splash
  13. DevExpress v18.1新版亮点——WPF篇(二)
  14. 马克·扎克伯格分享Facebook水冷数据中心照片
  15. UnauthorizedAccessException Invaild cross-thread access
  16. Git教程 Git Bash详细教程
  17. 大数据—价值体现在AI、BI、CI和DI
  18. 三、判断三元一次方程组是否有解及求解——(计算糖果)
  19. android 反编译改log,android 反编译,逆向,注入LOG
  20. 中国人工智能学会通讯——搜狗搜索:从搜索到问答 1.2 搜狗汪仔——具备问答能力的机器人...

热门文章

  1. 傻傻分不清的javascript运行机制
  2. 0011_练习题d1
  3. jdk8飞行记录器配置
  4. IOS的钥匙串,确保本地隐私数据的安全
  5. 新的sublime text已经上传网盘,地址写在下面
  6. 规划文章的“显示效果”,还是太多犹豫。
  7. C#中判断空字符串的3种方法性能分析【月儿原创】
  8. 古怪的ConfigurationManager类
  9. ASP.NET重用代码技术 - 用户控件技术
  10. free not return memory