多态含义:
    .同一个对象在不同时刻表现出来的的不同形态
    .我自己的感觉是,把父类当作一个参考对象,通过在子类里面重写的方式,在其他类里面,实例化子类,然后调取父类的参考对象然后调取实例化的子类进行完成数据的调取;
    .上面的话简单点来说,就是我们在学继承的时候,通常就是在子类调取父类的值用,多态就是在方法重写的基础下,通过父类,来调取所有子类的重写的方法,
举例:猫
    .我们可以说是猫是猫,猫 cat = new 猫();
    .也可以说是猫是动物,动物 animal = new cat();
    .这里的猫在不同时候表现出来了不同状态,就是多态
多态的前提和体现
    .有继承和实现关系
    .有方法重写
    .有父类引用指向子类对象   
多态中成员的访问特点
    .成员变量:编译看左边,执行看左边 ->两者都存有共同名称的变量,就能访问得到,但是得到的是父类的成员变量
    .成员方法:编译看左边,执行看右边 ->两者都存有共同名称的变量,就能访问得到,但是得到的是子类的成员方法
为啥成员变量和成员方法的访问方式不一样?
    .因为成员方法有重写,而成员变量没有
多态的好处和弊端
  .多态的好处:提高了程序的扩展性
    .具体体现:定义方法的时候,使用父类型作为参数,将来在使用的时候,使用具体的子类型参与此操作
  .多态的弊端:不能使用子类特有的功能
多态的转型 -> 多态的弊端:不能使用子类特有的功能->帮助我们使用子类的特有功能
  .向上转型
    .从子到父
    .父类引用子类对象
  .向下转型
    .从父到子
    .父类引用转为子类对象


以下为猫狗案例的多态版本  和   向下转型的案例

cat类 dog类 animal类 animaldemo类,详解还是需要看代码

需求:
    .请采用多态的思想实现猫和狗的案例,并在测试类中开始测试
思路:
  1.定义动物类(animal)
    .成员变量 姓名 年龄
    .构造方法 无参 带参
    .成员方法 get/set,吃饭()
  2.定义猫类(cat)继承动物类
    .构造方法 无参 带参
    .成员方法  重写吃饭()
  3.定义狗类(dog)继承动物类
    .构造方法 无参 带参
    .成员方法  重写吃饭()
  4.测试类
    .写代码测试

animaldemo类

package 多态案例_猫和狗;public class animaldemo {/*
需求:.请采用多态的思想实现猫和狗的案例,并在测试类中开始测试
思路:1.定义动物类(animal).成员变量 姓名 年龄.构造方法 无参 带参.成员方法 get/set,吃饭()2.定义猫类(cat)继承动物类.构造方法 无参 带参.成员方法  重写吃饭()3.定义狗类(dog)继承动物类.构造方法 无参 带参.成员方法  重写吃饭()4.测试类.写代码测试*/public static void main(String[] args) {// TODO 自动生成的方法存根//创建猫类对象的多态形式animal  a = new cat();      //无参猫a.setAge(5);a.setName("加菲");System.out.print(a.getAge()+"岁的猫 "+a.getName()+" 喜欢");a.eat();a = new cat("加洛特",15);     //有参猫System.out.print(a.getAge()+"岁的猫 "+a.getName()+" 喜欢");a.eat();//创建狗类对象的多态形式animal  b = new dog();       //无参狗b.setAge(7);b.setName("斯蒂芬");System.out.print(b.getAge()+"岁的狗 "+b.getName()+" 喜欢");b.eat();b = new dog("王大",8);     //有参狗System.out.print(b.getAge()+"岁的狗 "+b.getName()+" 喜欢");b.eat();}}

animal类

package 多态案例_猫和狗;public class animal {private String name;private int age;//------成员变量------------------------------public void eat() {// TODO 自动生成的方法存根System.out.println("动物吃东西");}//------成员方法------------------------------/*** */public animal() {}/*** @param name* @param age*/public animal(String name, int age) {this.name = name;this.age = age;}//------构造方法------------------------------/*** @return name*/public String getName() {return name;}/*** @param name 要设置的 name*/public void setName(String name) {this.name = name;}/*** @return age*/public int getAge() {return age;}/*** @param age 要设置的 age*/public void setAge(int age) {this.age = age;}//------get/set------------------------------}

dog类

package 多态案例_猫和狗;public class dog extends animal {/*** */public dog() {super();// TODO 自动生成的构造函数存根}/*** @param name* @param age*/public dog(String name, int age) {super(name, age);// TODO 自动生成的构造函数存根}//------构造方法------------------------------@Overridepublic void eat() {// TODO 自动生成的方法存根System.out.println("吃骨头");}//------重写父类成员方法-----------------------}

cat类

package 多态案例_猫和狗;public class cat extends animal {/*** */public cat() {super();// TODO 自动生成的构造函数存根}/*** @param name* @param age*/public cat(String name, int age) {super(name, age);// TODO 自动生成的构造函数存根}//------构造方法------------------------------@Overridepublic void eat() {// TODO 自动生成的方法存根System.out.println("吃鱼");}//------重写父类成员方法-----------------------}

多态的向下转型,为了解决子类中独有的方法无法访问的问题

分为三个类

cat类 animal类 animaldemo类

多态的转型 -> 多态的弊端:不能使用子类特有的功能->帮助我们使用子类的特有功能
  .向上转型
    .从子到父
    .向上转型
  .向下转型
    .从父到子
    .父类引用转为子类对象

animaldemo类

package 多态的转型;public class animaldemo {/*多态的转型 -> 多态的弊端:不能使用子类特有的功能->帮助我们使用子类的特有功能.向上转型.从子到父.向上转型.向下转型.从父到子.父类引用转为子类对象*/public static void main(String[] args) {
//      多态的方式创建对象animal a = new cat (); //向上转型  父类引用转为子类对象  把这个子类对象 给animal引用a.eat();//        cat c = new cat ();
//      c.eat();
//      c.playGame();//向下转型 ,强制转换,想要访问子类中,独有的变量cat c = (cat)a;c.playGame();//这种方式也可以animal b =  a;   ((cat) b).playGame();((cat) b).eat();}}

cat类

package 多态的转型;public class cat extends animal {@Overridepublic void eat() {// TODO 自动生成的方法存根System.out.println("猫吃东西");}public void playGame() {System.out.println("猫捉迷藏");}}

animal类

package 多态的转型;public class animal {public void eat() {// TODO 自动生成的方法存根System.out.println("动物吃东西");}}

总结:

在学会继承的基础上学多态没有什么问题,反而感觉还是很轻松,只是在内存图没有明白太多,不过我感觉都是小事情,非常稳妥。

Java 多态的基本操作相关推荐

  1. java多态 降低代码耦合性_深度分析:理解Java中的多态机制,一篇直接帮你掌握!...

    Java中的多态 1 多态是什么 多态(Polymorphism)按字面的意思就是"多种状态".在面向对象语言中,接口的多种不同的实现方式即为多态.用白话来说,就是多个对象调用同一 ...

  2. Java多态-如何理解父类引用指向子类对象

    java多态,如何理解父类引用指向子类对象 要理解多态性,首先要知道什么是"向上转型". 我定义了一个子类Cat,它继承了Animal类,那么后者就是前者是父类.我可以通过   C ...

  3. 笔记1——C++多态与Java多态的异同

    最近参加网易笔试遇到一个问题,考察了C++ 多态特性,自己查了相关资料学习了相关用法. 一般程序调用的函数地址是在编译期决定了,但是具有多态特性的函数调用地址是在程序运行期才决定. C++与Java多 ...

  4. 关于java多态中覆盖的理解

    在前面一篇文章中,我已经介绍了关于java多态中重载的理解与规则 所以这篇文章主要介绍多态中的覆盖机制. 首先重载与覆盖除了表现方式不同之外,还有运行时间上的不同,重载是在编译期间就已经可以确定好调用 ...

  5. 什么是Java多态?如何实现Java多态?

    java多态这个概念在同学们深入学习java的时候就会被提出,很多同学并不知道是什么意思,如何实现.今天小千就来给大家介绍一下什么是java多态和java如何实现多态. 什么是多态? 指允许不同类的对 ...

  6. Java学习笔记二十六:Java多态中的引用类型转换

    Java多态中的引用类型转换 引用类型转换: 1.向上类型转换(隐式/自动类型转换),是小类型到大类型的转换: 2.向下类型转换(强制类型转换),是大类型到小类型的转换: 3.instanceof运算 ...

  7. Java 多态、抽象类 笔记

    1. Java 多态 多态就是同一个接口,使用不同的实例而执行不同操作. 1.1 多态存在的三个必要条件 继承 重写 父类引用指向子类对象(Parent p = new Child();) 当使用多态 ...

  8. java 多态_Java 多态

    Java多态,在之前的向上转型的文章中已经介绍了使用场景和为什么要通过向上转型实现运行时多态,请先看文章:张舰:Java 向上转型和向下转型 这篇文章主要是总结一下Java多态的概念,具体的例子请参考 ...

  9. java 多态 降低耦合_java多态

    Java多态就是为了降低耦合,方便我们开发的一种特性. 比如我写了一个动物的接口.然后我通过接口实现了猫和狗这个类. 在我需要使用的时候我可以这样实例化对象 动物 w = new 猫. 这就是向上转型 ...

最新文章

  1. java获取真实ip工具类
  2. vivo U1正式亮相
  3. python urllib.request 爬虫 数据处理-python 爬虫之 urllib库
  4. 最简便的备份MySql数据库方法
  5. Windows 注册表开机启动总结
  6. python爬取网上文章_python 爬取微信文章
  7. cannot load oci dll,193-navicate连接oracle的解决方法
  8. mac系统升级 brew 是用不了_PostgreSQL数据库默默升级,导致数据库服务不可用
  9. (转载)正则表达式30分钟入门教程
  10. 不懂物联网,就别怪时代抛弃你!
  11. jdk动态代理异常处理分析,UndeclaredThrowableException
  12. Python数学建模系列(十):时间序列
  13. 打印一只Nyan Cat(彩虹猫)(C++)
  14. 瑞幸小鹿茶正面杠上喜茶,茶饮新零售鹿死谁手?
  15. 根据url 在ensembl 网站爬取外显子等数据
  16. 给宝宝补钙的健康新钙念
  17. 基于单片机的modbus从机程序
  18. Java object类型转换为int类型
  19. GaussDB架构(上)
  20. 电脑键盘如何计算机,如何认定一个好的电脑键盘?

热门文章

  1. gojs v2.3.5去水印
  2. 微信小程序获取用户头像并显示出来,很简单一行代码搞定!
  3. 一度经度与一度纬度长度
  4. android traceroute 功能实现,traceroute使用以及实现原理
  5. 设计模式03:装饰模式
  6. 烈焰重击_重复重击提示
  7. 前端代码开发规范。web开发规范。web开发注意事项。前端开发如何写出更规范的代码
  8. 想自学python,如果做不到这几条,建议选择继续躺平刷抖音.....
  9. SecureCRT萌新常用命令及Linux命令大全整理
  10. 某APP逆向算法学习与分析