一.多态

 1.1 多态:一个事物的多种形态

 1.2 多态的表现

行为(方法)多态:重写和重载。

引用多态(动态绑定):编译时的类型和运行时不一致的这种现象

例:父类 = 子类

Pet p = new Dog();

  向上转型;父类=子类

   例:Pet p = new Dog();

向下转型:子类 = (子类)父类

例: Dog d = (Dog)p;

  1. public abstract class Pet {
  2. private String name;
  3. private int health=100;
  4. private int age;
  5. private int love=50;
  6. public Pet(){
  7.  
  8. }
  9. public Pet(String name,int health,int age,int love){
  10. this.name = name;
  11. this.health = health;
  12. this.age = age;
  13. this.love = love;
  14. }
  15. public String getName(){
  16. return name;
  17. }
  18. public void setName(String name){
  19. this.name= name;
  20. }
  21. public int getHealth(){
  22. return health;
  23. }
  24. public void setHealth(int health){
  25. this.health = health;
  26. }
  27. public int getAge(){
  28. return age;
  29. }
  30. public void setAge(int age){
  31. this.age = age;
  32. }
  33. public int getLove(){
  34. return love;
  35. }
  36. public void setLove(int love){
  37. this.love = love;
  38. }
  39. public void ji(){
  40. System.out.println("宠物的自白:我的名字叫:"+this.name+",年龄为:"+this.age+"和主人的亲密度为:"+this.love);
  41. }
  42. public abstract void eat();
  43. }

宠物抽象类

  1. public class Dog extends Pet{
  2. private String strain;
  3. public Dog(){
  4.  
  5. }
  6. public Dog(String name,int health,int age,int love,String strain){
  7. super(name,health,age,love);
  8. this.strain = strain;
  9. }
  10. public void catchingFlyDisc(){
  11. System.out.println("接飞盘");
  12. int health = getHealth();
  13. health = health-10;
  14. setHealth(health);
  15.  
  16. int love = getLove();
  17. love = love+5;
  18. setLove(love);
  19. }
  20. public void eat(){
  21. System.out.println("狗狗吃鱼");
  22. }
  23. public String getStrain(){
  24. return strain;
  25. }
  26. public void setStrain(String strain){
  27. this.strain = strain;
  28. }
  29.  
  30. }

狗狗类继承宠物类

  1. public class Penguin extends Pet {
  2. private String sex;
  3. public Penguin(){
  4.  
  5. }
  6. public Penguin(String name,int health,int age,int love,String sex){
  7. super(name,health,age,love);
  8. this.sex = sex;
  9. }
  10. public void swimming(){
  11. System.out.println("游泳");
  12. int health = getHealth();
  13. health = health-10;
  14. setHealth(health);
  15.  
  16. int love = getLove();
  17. love = love+5;
  18. setLove(love);
  19. }
  20. public void eat(){
  21. System.out.println("企鹅喝水");
  22. }
  23. public String getSex(){
  24. return sex;
  25. }
  26. public void setSex(String sex){
  27. this.sex = sex;
  28. }
  29.  
  30. }

企鹅类继承宠物类

  1. public class Master {
  2. public void feed(Pet p){
  3. p.eat();
  4. }
  5. public void play(Pet p){
  6. if(p instanceof Dog ){
  7. Dog d = (Dog) p;
  8. d.catchingFlyDisc();
  9. }else if(p instanceof Penguin){
  10. Penguin pe = (Penguin) p;
  11. pe.swimming();
  12. }
  13. }
  14. }

主人类

  1. public class TestPMPD {
  2. public static void main(String[] args){
  3. Master m= new Master();
  4. //向下转型
  5. Pet p = new Dog();
  6. Dog d = (Dog) p;
  7. m.feed(d);
  8. // Pet p = new Penguin();
  9. // m.feed(p);
  10. }
  11. }

测试类

运行结果为:

注意:java.lang.ClassCastException:类型转换异常

父类的运行时类型跟要转成的子类的类型不一致

注意:引用多态存在继承关系

二.instanceof

语法: 对象A instanceof 类型B

判断对象A的类型是否是类型B,是就返回true,否则返回false

例:d instanceof Dog

三.实现多态的2种形式

a.使用父类作为方法形参实现多态

public void play(Pet p){...}

b.使用父类作为方法返回值实现多态

public Pet getPet(int type){...}

Java(15) 多态的更多相关文章

  1. Java 中多态的实现(下)

    Java 中多态的另一个语法实现是重写.重载是通过静态分派实现的,重写则是通过动态分派实现的. 在学习动态分派之前,需要对虚拟机的知识有一个初步的了解. 虚拟机运行时数据区 运行 Java 程序时,虚 ...

  2. 关于java中多态的理解

    java三大特性:封装,继承,多态. 多态是java的非常重要的一个特性: 那么问题来了:什么是多态呢? 定义:指允许不同类的对象对同一消息做出响应.即同一消息可以根据发送对象的不同而采用多种不同的行 ...

  3. 深入Java核心 Java中多态的实现机制(1)

    在疯狂java中,多态是这样解释的: 多态:相同类型的变量,调用同一个方法时,呈现出多中不同的行为特征, 这就是多态. 加上下面的解释:(多态四小类:强制的,重载的,参数的和包含的) 同时, 还用人这 ...

  4. 个人对Java中多态的一些简单理解

    什么是多态 面向对象的三大特性:封装.继承.多态.从一定角度来看,封装和继承几乎都是为多态而准备的.这是我们最后一个概念,也是最重要的知识点. 多态的定义:指允许不同类的对象对同一消息做出响应.即同一 ...

  5. Java中多态的一些简单理解

    什么是多态 .面向对象的三大特性:封装.继承.多态.从一定角度来看,封装和继承几乎都是为多态而准备的.这是我们最后一个概念,也是最重要的知识点. .多态的定义:指允许不同类的对象对同一消息做出响应.即 ...

  6. Java JVM 多态(动态绑定)

    Java JVM 多态(动态绑定) @author ixenos 摘要:绑定.动态绑定实现多态.多态的缺陷.纯继承与扩展接口.向下转型与RTTI 绑定 将一个方法的调用和一个方法的主体关联起来,称作( ...

  7. Java:多态乃幸福本源

    01 多态是什么 在我刻板的印象里,西游记里的那段孙悟空和二郎神的精彩对战就能很好的解释“多态”这个词:一个孙悟空,能七十二变:一个二郎神,也能七十二变:他们都可以变成不同的形态,但只需要悄悄地喊一声 ...

  8. 从虚拟机指令执行的角度分析JAVA中多态的实现原理

    从虚拟机指令执行的角度分析JAVA中多态的实现原理 前几天突然被一个"家伙"问了几个问题,其中一个是:JAVA中的多态的实现原理是什么? 我一想,这肯定不是从语法的角度来阐释多态吧 ...

  9. 学习博客之Java继承多态接口

    这一篇博客主要是对软工前一阶段学习的总结,主要是对Java的学习总结,包括三部分:Java的继承.多态和接口 Java的继承 继承是面向对象的三大特性之一,能够实现软件的复用. Java子类继承父类的 ...

随机推荐

  1. Linux(CentOS7)下如何配置多个Tomcat容器

    一.Linux版本 二.上传并解压apache-tomcat-7.0.90压缩包,然后复制粘贴出来多个tomcat 解压缩 tar -xzvf apache-tomcat-7.0.90.tar.gz ...

  2. kerberos环境下flume写hbase

    直接看官网 http://flume.apache.org/releases/content/1.9.0/FlumeUserGuide.html#hbasesinks a1.channels = c1 ...

  3. 第一课android开发之在activity间传递参数

    一.活动间简单参数传递:1.在布局中添加按钮,用<Button,用id设置id名称,id="@+id/这儿填写你要设置成的名称":用text设置按钮上显示的文字.text=& ...

  4. java 向上向下取整

    Math.floor(1.4)=1.0 Math.round(1.4)=1 Math.ceil(1.4)=2.0 Math.floor(1.5)=1.0 Math.round(1.5)=2 Math. ...

  5. [SNOI2017]炸弹

    嘟嘟嘟 这题有一些别的瞎搞神奇做法,而且复杂度似乎更优,不过我为了练线段树,就乖乖的官方正解了. 做法就是线段树优化建图+强连通分量缩点+DAGdp. 如果一个炸弹\(i\)能引爆另一个炸弹\(j\) ...

  6. Python--day10(函数(使用、分类、返回值))

    1.  函数 1.  函数: 完成特定功能的代码块,作为一个整体,对其进行特定的命名,该名字就代表这函数 现实中:很多问题要通过一些工具进行处理 => 可以将工具提前生产出来并命名 =>通 ...

  7. fuel一键部署openstack

    一.安装环境: 1. 所需物理主机的要求如下 内存:8GB+,推荐16GB:(少于8GB的就免谈了) 磁盘:500GB+: 物理机OS:ubuntu-desktop-amd64 14.04(推荐) 或 ...

  8. 移除 iview的Input组件默认background效果

    .class名 .ivu-input-group-prepend{ background:rgba(255,255,255,0); color: #fff; }

  9. git 解决多人修改相同的文件导致的冲突

    git冲突处理     (场景:A和B修改相同的文件,A先提交到远程仓库,然后B提交push报错,远程仓库有更改,git自动合并失败,需要手动合并 提示错误:Automatic merge faile ...

  10. Linux centos ssh

    创建m01.backup.nfs.web01.web02 m01(172.16.1.61).backup(172.16.1.41).nfs(172.16.1.31).web01(172.16.1.7) ...