首页 > 编程语言 >java小白入门学习之---多态(重要)

java小白入门学习之---多态(重要)

时间:2024-11-26 13:31:54浏览次数:10  
标签:java 子类 多态 --- animal 类型 new 父类

引出

传统的方法:代码复用性不高,不利于管理和维护
解决方法:多态

  • 多【多种】态【状态】:(方法或对象具有多种形态,面向对象的第三大特征,建立于封装、继承之上)

一、方法的多态

1.重写和重载就体现多态

重载:

       A a=new A();
       System.out.print(a.sum(10,30));
       System.out.print(a.sum(10,30,50));

重写:

        B b=new B();
        System.out.print(b.say("hi"));
        A obja= new A();
        System.out.print(obja.say("ok"));
        //对象不一样调用的方法不一样

二、对象的多态(核心)

1.一个对象的编译类型和运行类型可以不一样
2.编译类型在定义对象时就确定了,所以不能改变
3.=左编译,=右运行,编译不变,运行可变

        Animal animal=new Cat();
        //animal 编译对象是 Aniaml ,运行类型 Cat
        animal.cry();
        //animal运行类型是Cat,所以cry就是Cat的cry 

        animal=new Dog();
        //animal运行类型为Animal,运行类型为Dog
        animal.cry();
        //animal运行类型是Doy,所以cry就是Doy的cry

三、向上转型

  • 定义:父类的引用指向了子类的对象
  • 语法:父类类型 引用名 = new 子类类型引用名
        //语法:父类类型 引用名 = new 子类类型引用名
        Animal animal=new Cat();
        Object obj=new Cat();
        //可以吗?   可以,Object是所有父类的爷爷
  • 向上转型调用规则:
    1. 可以调用父类中的所有成员(需遵守访问权限
    2. 但是不能调用子类的特有的成员
    因为在编译阶段,能调用哪些成员,是由编译类型来决定的
    3. 最终运行效果看子(运行类型)的具体实现,即调用方法时,按照从子类(运行类型)开始查找方法然后调用,规则与方法调用规则一致。

四、向下转型

  • 作用:当向下转型后,可以调用子类类型中所有的成员
  • 语法:子类类型 引用名=(子类类型)父类引用
        //语法:子类类型  引用名 =(子类类型)父类引用
        Cat cat=(Cat)animal;
  • 向下转型调用规则(注意事项):
    1.只能强转父类的引用,不能强转父类的对象
    2.要求父类的引用必须指向的是当前目标类型的对象

    - 强转条件是:父类引用指向的是当前要强转后的目标类型的对象
    - 区分:向上转型是父类引用指向子类对象,能调用父类成员,向下转型是父类引用强转子类引用并指向子类对象,可以调用全部子类成员
    

五、属性重写 / instanceof

  • 属性没有重写:属性的值看编译类型

Animal animal=new Cat();//Animal为编译类型
System.out.print(animal.a);//111
____________________________________________________________
 class Animal{
    int a=111;
 }
class Cat extends Animal {
    int a=222;
}
  • instanceof(比较操作符):用于判断对象的运行类型是否为XX类型或XX类型的子类型
BB bb=new BB();
Object obj2=null;
System.out.print(bb instanceof AA);//(true)其中A是B的父类
System.out.print(obj2 instanceof AA);//(false)Object是所有类的爷爷

* 练习小结

在这里插入图片描述
1.属性看编译,方法看运行
2.两个对象比较的是地址


六、动态绑定机制(炒鸡重要!!)

1.当调用对象方法的时候,该方法会和该对象的
存地址/运行类型绑定

2.当调用对象属性时,没有动态绑定机制,哪里声
明,那里使用

  • 属性静态看编译类型(父类)(属性无多态),属性动态无绑定,服从就近原则。
    方法静态看运行类型(子类,表现出多态),方法动态绑定运行类型。

七、多态应用–多态数组

  • 定义:数组的定义类型为父类类型,里面保存的实际元素类型为子类类型
  • (遍历数组输出)在这里插入图片描述
    (使用类型判断+向下转型来调用子类特有的方法)在这里插入图片描述

八、多态应用–多态参数

  • 方法定义的形参类型为父类参数,实参类型允许为子类类型
    在这里插入图片描述

标签:java,子类,多态,---,animal,类型,new,父类
From: https://blog.csdn.net/2401_88623584/article/details/144017860

相关文章

  • BY组态-低代码web可视化组件
     简介BY组态是集实时数据展示、动态交互等一体的全功能可视化平台。帮助物联网、工业互联网、电力能源、水利工程、智慧农业、智慧医疗、智慧城市等场景快速实现数字孪生、大屏可视化、Web组态、SCADA等解决方案。具有实时监控、多样、变化、动态交互、高效、可扩展、支持自......
  • 【NLP高频面题 - 分布式训练】ZeRO1、ZeRO2、ZeRO3分别做了哪些优化?
    【NLP高频面题-分布式训练】ZeRO1、ZeRO2、ZeRO3分别做了哪些优化?重要性:★★NLPGithub项目:NLP项目实践:fasterai/nlp-project-practice介绍:该仓库围绕着NLP任务模型的设计、训练、优化、部署和应用,分享大模型算法工程师的日常工作和实战经验AI藏经阁:https://gite......
  • hhdb数据库介绍(9-7)
    高可用服务计算节点提供数据节点内的存储节点高可用,当主存储节点不可用时,计算节点将自动切换到从存储节点。若要使用数据节点高可用,需满足以下前提:在数据节点内配置主从存储节点与故障切换优先级规则;主从存储节点之间必须已配置主从或双主的复制关系;在计算节点配置文件中开......
  • 2025最新在线客服源码-即时通讯实时消息-企业级源码-可私有部署定制开发
    本系统采用GolangGin框架+GORM+MySQL+Vue+ElementUI开发的独立高性能在线客服系统。客服系统访客端支持PC端、移动端、小程序、公众号中接入客服,利用超链接、网页内嵌、二维码、定制对接等方式让网上所有通道都可以快速通过本系统联系到商家。服务端可编译为二进制程序包,无需搭......
  • Sigrity OptimizePI Post-Layout Analysis模式如何对PDS系统进行电容统计分析操作指导
    SigrityOptimizePIPost-LayoutAnalysis模式如何对PDS系统进行电容统计分析操作指导-StatisticalAnalysis下面介绍使用SigrityOptimizePIPost-LayoutAnalysis中的Statistical模式进行电容公差的统计分析,统计分析就是分析电容的Upper和LowerTol公差对于阻抗的影响.分别......
  • Java全栈开发:智慧校园系统设计与实现
    一、项目概述智慧校园系统是一个面向高校师生的综合信息服务平台,采用Java全栈技术开发,包括SpringBoot后端和Vue.js前端,实现了校园信息化和智能化管理。二、系统主要功能模块1.成绩管理模块教师成绩录入与修改学生成绩查询成绩统计分析成绩单导出打印2.校园卡管理校......
  • 【Realtek sdk-3.6.0】RTL8197+RTL8832BR修改5G ACS算法功能实现
    RTL8832BRFeatureLists802.11a/b/g/n/ac/axcompatibleAPmodesupportSecuritysupport64/128bitsWEP,WPA,andWPA2(TKIPandAES-CCMP)AutorateadaptivenBroadcastSSIDcontrolDriverbasedMPfunctionsWMMsupportedforAPmodeSupportWLANASICo......
  • 985研一学习日记 - 2024.11.25
    一个人内耗,说明他活在过去;一个人焦虑,说明他活在未来。只有当一个人平静时,他才活在现在。日常1、起床2、健身3、LeetCode刷了1题单词拆分给定一个非空字符串s和一个包含非空单词的列表wordDict,判定s是否可以被空格拆分为一个或多个在字典中出现的单词。该问题......
  • java基础知识(常用类)
    目录一、包装类(Wrapper) (1)包装类与基本数据的转换 (2)包装类与String类型的转换  (3)Integer类和Character类常用的方法二、String类(1)String类介绍1)String对象用于保存字符串,也就是一组字符序列2)字符串常量对象是用双引号括起的字符序列。例如:"你好"、"12.97"、......
  • java基础知识(Math类)
    引入:Math类包含用于执行基本数学运算的方法,如初等指数、对数、平方根importjava.util.Math 1.abs绝对值intabs =Math.abs(-9);2.pow求幂doublepow=Math.pow(2,4);3.向上取整doubleceil=Math.ceil(3.9);//ceil=44.向下取整doublefloor=Math.floor(4......