多态.Java

(1)什么是多态?

  • 同类型的对象,表现出不同的形态。前者指父类,后者指不同的子类

说简单点,就是父类的同一种方法,可以在不同子类中表现出不同的状态,或者说在不同子类中可以实现不同的效果(重写)。

(2)多态的前提

  • 有继承/实现关系------有了继承才有子父类之分
  • 有父类引用指向子类对象------,如:Animal a = new Dog(); ——小到大,向上转型。这里父类引用指向子类对象,其实相当于把子类对象当父类对象来用,所以这是一种向上转型的引用。
  • 有方法重写------在不同的子类中重写父类方法,实现自己不同的功能。当然也可以不重写,主要是重写这个功能使得每个子类都独具一格,不会全都相同,这是多态重要的一点。

(3)多类的好处

  • 方法使用父类类型作为形参,就可以接收所以子类对象,体现多态的扩展性与便利

(4)多态的表现形式

  • 父类类型  对象名称=new  子类类型();
Fu a=new Zi();

(5)调用的特点

  • 成员变量:编译看左边,运行也看左边
  • 成员方法:编译看左边,运行看右边(子类如果进行方法重写的话,父类里的方法就被覆盖

(6) 多态弊端是什么?

  • 不能调用子类特有功能,因为编译看左边,特有功能表示父类没有,代码直接报错

(7)引用数据类型的转换有几种方式?

  • 自动类型转换
  • 强制类型转换(可解决弊端)
//自动类型转换
Person p=new Student;//小(Student)--->大(Person)
//强制类型转换
Student s=(Student)p;//大(Person)--->小(Student)

(8)强制类型转换能解决什么问题?

  • 可以把对象转换成真正的子类类型,从而调用子类的特有功能
  • 转换类型与真实对象类型不一致会报错
  • 转换的时候用instanceof关键字进行判断它属于哪个子类

(9)综合练习

  • 根据需求完成代码

父类Animal

package duotai;

public class Animal {
    private String color;
    private int age;

    public Animal() {
    }

    public Animal(String color, int age) {
        this.color = color;
        this.age = age;
    }

    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public void eat(String something){
        System.out.println("动物在吃"+something);

    }
}

 子类Dog

package duotai;

public class Dog extends Animal{
    public Dog() {
    }

    public Dog(String color, int age) {
        super(color, age);
    }

    @Override
    public void eat(String something) {
        System.out.println("此时此刻"+getAge()+"岁"+getColor()
                +"颜色的狗抱着"+something+"猛吃");
    }
    public void lookHome(){
        System.out.println("狗在看家");
    }

}

子类Cat

package duotai;

public class Cat extends Animal{
    public Cat() {
    }

    public Cat(String color, int age) {
        super(color, age);
    }

    @Override
    public void eat(String something) {
        System.out.println("此时此刻"+getAge()+"岁"+getColor()
        +"颜色的猫眯着眼吃"+something);
    }

    public void catchMouse(){
        System.out.println("猫抓老鼠");
    }
}

Person类

package duotai;

public class Person {
    private String name;
    private int age;

    public Person() {
    }

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
    /*public void keepDog(Dog dog,String someting){
        System.out.println(this.age+"的"+this.name+"养了一条"
                +dog.getColor()+"的"+dog.getAge()+"岁的狗");
        dog.eat(someting);
    }

    public void keepCat(Cat cat,String someting){
        System.out.println(this.age+"岁的"+this.name+"养了一条"
                +cat.getColor()+"的"+cat.getAge()+"的小猫");
        cat.eat(someting);
    }
    //一个一个构造饲养动物的方法,过于繁琐
    */


    //构造一个方法,能够接收所有的动物
    //方法的形参:可以写这些类的父类,就可以接收所以子类对象(多态)
    public void keepPet(Animal a,String something){
        //if条件语句判断它属于哪一个子类,进行强转,就可以使用子类特有的方法
        if(a instanceof Dog ){
            Dog d=(Dog)a; //Animal强转成Dog
            System.out.println(this.age+"的"+this.name+"养了一条"
                    +a.getColor()+"的"+a.getAge()+"岁的狗");
            a.eat(something);
            d.lookHome();
        } else if (a instanceof Cat ) {
            Cat c=(Cat)a; //Animal强转成Cat
            System.out.println(this.age+"的"+this.name+"养了一条"
                    +a.getColor()+"的"+a.getAge()+"岁的小猫咪");
            a.eat(something);
            c.catchMouse();
        }else {
            System.out.println("没有这种动物");
        }
    }
}

测试类

package duotai;

public class Test {
    public static void main(String[] args) {
         /*Person p1=new Person("西施",15);
         Dog d=new Dog("粉红",2);
         p1.keepDog(d,"美味的鸡叉骨");

         //选中+shift+F6:批量修改
        Person p2=new Person("花木兰",16);
        Cat c=new Cat("淡黄",4);
        p2.keepCat(c,"美味的小鱼干");*/


        Person p1=new Person("西施",15);
        Dog d=new Dog("粉红",2);
        p1.keepPet(d,"美味的鸡叉骨");
        Person p2=new Person("花木兰",16);
        Cat c=new Cat("淡黄",3);
        p2.keepPet(c,"美味的小鱼干");

    }
}

结果

 注意:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/520207.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

[技术闲聊]我对电路设计的理解(七)-Cadence原理图绘制

一、原理图软件推荐 之前的章节有讲过AD、PADS、Cadence,以及三者的应用标准,今天再讲讲这一点。 如果是学生,可以学习AD软件,因为学校在学习,上手容易,而且即使工作后,如果是电机控制等4层板或…

websokcet服务端实现

一/websokcet服务端实现 步骤一&#xff1a; springboot底层帮我们自动配置了websokcet&#xff0c;引入maven依赖 1 2 3 4 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-websocket</arti…

力扣刷题 二叉树遍历的统一迭代法

题干 给定一个二叉树的根节点 root &#xff0c;返回 它的 前中后序 遍历 。 示例 1&#xff1a; 输入&#xff1a;root [1,null,2,3] 输出&#xff1a;[1,3,2]示例 2&#xff1a; 输入&#xff1a;root [] 输出&#xff1a;[]示例 3&#xff1a; 输入&#xff1a;root […

Python 之 Fastapi 框架学习

依赖安装 Fastapi 有版本要求&#xff0c;需要的 Python 版本至少是 Python 3.8&#xff08;不要犟&#xff0c;按照版本要求来&#xff0c;我最先也是在我 Python3.6 上装的&#xff0c;果不其然跑不起来&#xff09;&#xff0c;幸好我 Win7 老古董能支持的 Python 最高版本…

FastWiki发布`0.2.4`支持js 函数

Release v0.2.4 AIDotNet/fast-wiki (github.com) 支持JS动态functioncall调用支持动态function管理支持JS在线编辑提供智能代码提示支持JS在线编辑提供部分绑定的c#类&#xff08;默认提供Console&#xff0c;HttpClient&#xff09;支持Application绑定多个Function Call优…

跨站请求伪造漏洞(CSRF)

什么是CSRF CSRF&#xff08;Cross-Site Request Forgery&#xff09;&#xff0c;也被称为 one-click attack 或者 session riding&#xff0c;即跨站请求伪造攻击。 漏洞原理 跨站请求伪造漏洞的原理主要是利用了网站对用户请求的验证不严谨。攻击者会在恶意网站中构造一个…

linux 文件提权|属性修改

文章目录 suid&#xff08;set uid&#xff09;添加文件属性查看文件属性i &#xff08;immutable&#xff09; umask suid&#xff08;set uid&#xff09; 让文件在执行的时候具有属主&#xff08;对应文件 user &#xff09;的权限 chmod 7744 temp.txt 第一位的7表示权限位…

探寻大数据思想的主要贡献者与核心内容

引言&#xff1a; 在当今数字化时代&#xff0c;大数据已成为企业和科学研究的关键要素。其背后的思想和概念不仅引领了数据处理和分析的革新&#xff0c;也推动了人类对于信息时代的理解与认知。 大数据思想的起源&#xff1a; 在信息爆炸的时代背景下&#xff0c;大数据思…

海外仓的出入库流程有什么痛点?位像素海外仓系统怎么提高出入库效率?

随着跨境电商的蓬勃发展&#xff0c;海外仓是其中不可或缺的一个关键环节。而货物的出库与入库则是海外仓管理中的一个核心业务流程&#xff0c;它的运作效率直接影响到整个跨境物流的效率和客户体验。今天&#xff0c;让我们具体来看一看关于海外仓出入库的流程&#xff0c;其…

150行Python代码模拟太阳系行星运转

今天我们用Python来模拟一下太阳系行星运动轨迹~ 先上成品图&#xff08;运行效果含音乐的呦&#xff09; 想要实现这样的效果并不难 准备材料 首先我们需要准备这样一些材料 宇宙背景图 背景透明的行星图 编写代码 代码分块详解 导入需要的模块 import pygame import …

深度学习理论基础(六)多头注意力机制的自定义及Pytoch库的使用详细代码

目录 1. Scaled Dot-Product Attention2. 多头注意力机制框图&#xff08;1&#xff09;计算公式&#xff08;2&#xff09;具体计算过程&#xff08;3&#xff09;具体代码 深度学习中的注意力机制&#xff08;Attention Mechanism&#xff09;是一种模仿人类视觉和认知系统的…

轻量应用服务器4核8G12M配置优惠价格646元一年零3个月,12M公网带宽

腾讯云轻量4核8G12M服务器优惠价格646元15个月&#xff0c;买一年送3个月&#xff0c;配置为轻量4核8G12M、180GB SSD盘、2000GB月流量、12M带宽&#xff0c;腾讯云优惠活动页面 yunfuwuqiba.com/go/txy 活动链接打开如下图&#xff1a; 腾讯云4核8G服务器租用价格 腾讯云&…

SaaS模式Java版云HIS系统源码 覆盖医院所有业务的HIS信息管理系统源码

SaaS模式Java版云HIS系统源码 覆盖医院所有业务的HIS信息管理系统源码 HIS&#xff08;Hospital Information System&#xff09;是覆盖医院所有业务和业务全过程的信息管理系统。 HIS系统以财务信息、病人信息和物资信息为主线&#xff0c;通过对信息的收集、存储、传递、统…

Android 窗口那些事儿

目录 1. &#x1f4c2; 前言 你&#xff0c;是否有过这些疑问&#xff1f; 2. &#x1f531; Window 2.1 认识 Window 的几个阶段 1&#xff09;阶段一&#xff1a;Window 约等于 Activity 2&#xff09;阶段二&#xff1a;Window 约等于 View 3&#xff09;阶段三&…

list的使用

前言 我们前面已经对string和vector进行了学习使用&#xff0c;以及对他们的底层进行了模拟实现&#xff01;本期我们继续学习STL的另外一个容器---list。 本期内容介绍 什么是list&#xff1f; list的常用接口 什么是list? 还是来看看官方的文档说明&#xff01; 这里通过…

[蓝桥杯 2017 国 C] 合根植物

[蓝桥杯 2017 国 C] 合根植物 题目描述 w 星球的一个种植园&#xff0c;被分成 m n m \times n mn 个小格子&#xff08;东西方向 m m m 行&#xff0c;南北方向 n n n 列&#xff09;。每个格子里种了一株合根植物。 这种植物有个特点&#xff0c;它的根可能会沿着南北…

【MySQL】增删改查操作(基础)

文章目录 1、新增操作&#xff08;Create&#xff09;1.1单行数据全列插入1.2多行数据指定列插入 2、查询操作&#xff08;Retrieve&#xff09;2.1全列查询2.2指定列查询2.3指定列查询2.4别名&#xff08;as&#xff09;2.5去重&#xff08;distinct&#xff09;2.6排序&#…

数据结构—图

图的基本概念 图就是由顶点的有穷非空集合和顶点之间的边组成的集合。通常表示为&#xff1a;G(V,E)&#xff0c;其中&#xff0c;G 表示一个图&#xff0c;V 表示顶点的集合&#xff0c;E 表示边的集合。 顶点 图中的数据元素&#xff0c;我们称之为顶点&#xff0c;图至少有…

常见现代卷积神经网络(Pytorch 09)

本章将介绍现代的 卷积神经网络架构&#xff0c;许多现代卷积神经网络的研究都是建立在这一章的基础上的。在本章中的每一个模型都曾一度占据主导地位&#xff0c;其中许多模型都是 ImageNet竞赛 的优胜者。ImageNet竞赛自2010年以来&#xff0c;一直是计算机视觉中监督学习进展…

面试题——JVM老年代空间担保机制(我的想法)

这里借用一下人家的图&#xff0c;来说一下我的想法&#xff0c;嘻嘻。。。。 原文链接&#xff1a;一道面试题&#xff1a;JVM老年代空间担保机制-CSDN博客? 嗯&#xff0c;我觉得老年代担保机制的主要作用就是避免频繁触发FULL GC&#xff0c;这其实也是因为年轻代Minor GC…