Java#19(面向对象三大特征之一:多态)

news2025/1/15 22:58:39

 

目录

一.多态

二.多态中调用成员的特点

三.instanceof关键字


一.多态

多态:同类型的对象,表现出的不同形态

格式:父类类型 对象名称 = 子类对象;

前提:

(1)有继承关系

(2)有父类引用指向子类对象

(3)有方法重构

优点:

(1)使用父类作为参数,可以接收所有子类对象

(2)体现多态的扩展性和便利

代码示范:

第一段为父类Person,第二,第三,第四段分别是3个子类,第五段是测试代码

package Demo;

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 show(){
        System.out.println(name+","+age);
    }
}
package Demo;

public class Student extends Person{
    //重写方法
    @Override
    public void show(){
        System.out.println("学生的姓名为:"+getName()+" 年龄为:"+getAge());
    }

}
package Demo;

public class Teacher extends Person{
    //重写方法
    @Override
    public void show(){
        System.out.println("老师的姓名为:"+getName()+" 年龄为:"+getAge());
    }
}
package Demo;

public class Administrator extends Person{
    @Override
    public void show(){
        System.out.println("管理员的姓名为:"+getName()+" 年龄为:"+getAge());
    }
}
package Demo;

import java.rmi.registry.Registry;

public class Test {
    public static void main(String[] args) {
        //创建对象
        Student s = new Student();
        s.setName("zhangsan");
        s.setAge(19);

        Teacher t = new Teacher();
        t.setName("lisi");
        t.setAge(31);

        Administrator admin = new Administrator();
        admin.setName("wangwu");
        admin.setAge(40);

        register(s);
        register(t);
        register(admin);

    }

    //这个方法可以接收学生,老师,还有管理员
    //将父类写在参数位置
    public static void register(Person p){
        p.show();
    }
}

结果展示:s是学生对象,t是老师对象,admin是管理员对象

二.多态中调用成员的特点

调用成员变量:编译看左边,运行也看左边

(编译看左边:javac编译代码时,会看左边父类有没有这个变量,如果有,编译成功,如果没有,编译失败; 运行看左边:java运行代码时,实际上运行的是左边父类的成员变量)

调用成员方法:编译看左边,运行看右边

(编译看左边:javac编译代码时,会看左边父类有没有这个方法,如果有,编译成功,如果没有,编译失败; 运行看右边:java运行代码时,实际上运行的是右边子类的成员方法)

代码示范:

package Demo1;

public class Test {
    public static void main(String[] args) {
        Animal a = new Cat();
        System.out.println(a.name);
        a.show();
    }
}
//父类Animal
class Animal{
    String name = "动物";

    public void show(){
        System.out.println("animal show");
    }
}
//子类Cat
class Cat extends Animal{
    String name = "猫";
    @Override
    public void show(){
        System.out.println("cat show");
    }
}

结果展示:

三.instanceof关键字

格式:对象名 instanceof 类名; (判断这个对象是不是后面这个类,是返回true,不是返回false)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

科技金融企业助力乡村振兴,能有多大新意?

最近几年,越来越多科技互联网企业开始承担起他们的社会责任,成为乡村振兴领域一股不可忽视的力量。作为电商平台,阿里、拼多多、京东助力农产品上行,解决农产品的销售难题,直接为乡村振兴领域做出大贡献,但…

罗丹明PEG活性酯 RB-PEG-NHS,罗丹明聚乙二醇活性酯,Rhodamine-PEG-NHS

产品名称 罗丹明聚乙二醇活性酯 RB-PEG-NHS 中文名称 罗丹明PEG活性酯 活性酯PEG罗丹明 活性酯聚乙二醇罗丹明 英文名称 RB-PEG-NHS RB-PEG-SC Rhodamine-PEG-NHS 分子量 400 600 1000 2000 3400 5000 10000 结构式: CAS N/A 溶解度 溶于DMSO,DMF,DCM&#xff…

Linux进阶-编译工具链

gcc编译器(预处理、编译) binutils工具集(汇编、链接) 本地编译:编译工具链和目标程序运行在相同的架构平台。 交叉编译:编译工具链和目标程序运行在不同的架构平台。 ARM-GCC是GCC编译工具链的一个分支…

Spring Data JPA审计

Spring Data JPA为跟踪持久性层的变化提供了很好的支持。通过使用审核,我们可以存储或记录有关实体更改的信息,例如谁创建或更改了实体以及何时进行更改。 我们可以利用实体字段上的CreatedBy,CreatedDate,LastModifiedDate,LastModifiedBy注释来指示 S…

PointNet 和 PointNet++ 作者讲座学习笔记

文章目录前人的工作三维数据的表达形式把点云转化为体素,再用3D CNNPointNet两个挑战置换不变性旋转不变性PointNet的分类网络PointNet的分割网络PointNet的限制PointNet多级点云特征学习分类分割小区域大小参考资料前人的工作 三维数据的表达形式 点云&#xff1…

Adaptive AUTOSAR Technology Sharing

文章目录一、目录二、未来汽车基础设施需求三、整车架构四、CP vs AP五、AP架构1.Execution Management与State Management的关系2.Service-oriented communication2.Diagnostic Management3.Persistency4.Log and Trace5.安全支持6.安全方法7.信息安全8. AutoSar:T…

Selenium4之CDP

相较于以前的版本,Selenium4除了推出了relative Locators,还有一个比较重要的更新就是对于Chrome Dev Tools Protocol的支持。 Chrome Dev Tools Protocol帮助用户监测、检查、调试和模版化Chrome浏览器以及基于Chromium的其它浏览器(比如EDG…

Spring Boot 2.x系列【27】应用篇之代码混淆

有道无术,术尚可求,有术无道,止于术。 本系列Spring Boot版本2.7.0 文章目录概述代码混淆ProGuard使用Maven 插件直接使用工具混淆概述 代码混淆 代码混淆(Obfuscated code)亦称花指令,是将计算机程序的代码,转换成…

创建.NET MAUI程序

.NET MAUI,先说说读音,Maui,英 [ˈmaui], 美 [ˈmaʊi],直接读:毛伊,或者读大写字母MAUI。 .NET 多平台应用 UI (.NET MAUI) 是一个跨平台框架,用于使用 C# 和 XAML 创建本机移动和…

混合云和多云:差异和相似之处

一般来说,云计算是服务器的集合,您可以通过 Internet 访问其资源。要访问云服务/资源,您需要一个云服务提供商根据您的业务需求为您提供服务。混合云和多云是两种比较流行的云计算类型,下文主要对两者的差异和相似之处作出详解&am…

CD147单克隆抗体通过酰胺反应偶联到Dox-CMCh-BAPE聚合物胶束/CBZ-AAN-Dox的制备

小编在这里给大家分享了CD147单克隆抗体通过酰胺反应偶联到Dox-CMCh-BAPE聚合物胶束/CBZ-AAN-Dox的制备,和小编一起来看! 瑞禧分享-CBZ-AAN-Dox的研究: 通过计算机辅助药物设计和化学合成,我们获得并研究了前药N-苄氧基羰基Ala-…

力扣 146. LRU 缓存

题目 请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。 实现 LRUCache 类: LRUCache(int capacity) 以 正整数 作为容量 capacity 初始化 LRU 缓存 int get(int key) 如果关键字 key 存在于缓存中,则返回关键字的值,否则返…

基于PHP+MySQL二手书交易系统

随着时代的变迁和人们的对知识的汲取,人们需要不断的购买一些新的图书来进行学习,但是这些图书在使用过一点时间之后其价值也会在拥有者手中变的没有那么高了,但是对于没有阅读和使用过这本书的人来说其还是具有更好的价值的,如果直接购买新书价格比较昂贵,对于拥有者来说如果将…

6个好用到爆的音频、配乐素材网站,BGM都在这里了

现在只要有一部手机,人人都能成为视频创作者。一个好的视频不能缺少的就是内容、配乐,越来越注重版权的当下,音效素材使用不当造成侵权的案例层出不穷。为了避免侵权,找素材让很多创作者很头疼。 今天我就整理了6个可以免费下载&a…

Hibernate多表的关联插入

一、一对多关系: “一”的一方为主表,“多”的一方为副表,主表关联副表,应该在主表中加入副表对象作为属性。 根据顾客ID查询顾客信息 (一) ,同时将顾客名下所有订单查出 (多&#…

公司建设网站的好处及优势

企业为什么要建网站?企业建站的好处和优势!在新的世纪里,互联网将进入一个全新的阶段,信息技术的发展将带动其他行业的发展,所有行业都将与之深度融合和渗透。 越来越多的企业开始从对互联网的认识阶段走向认同和行动…

在关系数据库中允许空值的一些缺点

早在 2020 年,我们就了解了关系数据库系统中的 NULL 值及其用途。正如那篇文章所述,NULL 值已成为一个特殊标记,表示不存在任何数值。你也可以说 NULL 值可能表示列可能有一个值,但是你还不知道该值是什么。在这种情况下&#xff…

Python: 打包发布到PyPi上

经常会碰到python包要打包成sdk放到PyPi上开源的情况。 下面的操作具体参考:https://packaging.python.org/en/latest/tutorials/packaging-projects/。 一、准备 1、pyproject.toml 我的具体如下 [build-system] requires ["setuptools>61.0"] bu…

atguigu8 集群

0. 集群介绍 (1)集群的目标 • 高可用(High Availability),是当一台服务器停止服务后,对于业务及用户毫无影 响。 停止服务的原因可能由于网卡、路由器、机房、CPU负载过高、内存溢出、自 然灾害等不可预…

基于Matlab使用线性FM波形对带状合成孔径雷达系统建模(附源码)

目录 一、合成孔径雷达成像 二、雷达配置 三、场景配置 四、SAR 信号模拟 五、总结 六、程序 此示例说明如何使用线性 FM (LFM) 波形对基于带状图的合成孔径雷达 (SAR) 系统进行建模。SAR是一种侧视机载雷达,与真实…