Java编程练习之类的多态

类的多态可以从两方面体现:一是方法的重载,二是类的上下转型。

1)方法的重载

方法的重载就是在同一个类中允许同时存在多个同名方法,只要这些方法的参数个数或类型不同即可。

练习1:

使用方法的重载描述所有的超市都支持现金付款,但大型商超还支持刷卡付款。

public class OverLoadTest {
    public static String pay(String a){
        return a;
    }
    public static String pay(String a,String b){
        return (a+b);
    }

    public static void main(String[] args){
        System.out.println("所有的超市都支持"+pay("现金支付"));
        System.out.println("大型商超支持"+pay("现金支付","刷卡支付"));
    }
    }

2)向上转型

把子类对象赋值给父类类型的对象,这种技术被称为"向上转型"。"向上转型"是一个从比较具体的类到较抽象类的转换,向上转型是安全的。在执行"向上转型"操作时,父类的对象无法调用子类独有的属性或者方法。

练习2:对于轿车而言,至少有油门踏板和刹车踏板。模拟自动挡车型的正确驾驶方式,运行结果如下:

class car{
    public static void drive(car c){
        System.out.println("右脚踩油门踏板!");
        System.out.println("右脚踩刹车踏板!");
    }
}
public class Autocar extends car{
    int num=0;
    public static void main(String[] args){
        Autocar a=new Autocar();
        a.num=2;
        System.out.println("自动挡汽车有"+a.num +"块踏板。");
        car b=new Autocar();
        drive(b);
    }
}

3)向下转型

向下转型是将抽象类转换为较具体的类。在做向下转型操作时,将特性范围小的对象转换为特性范围大的对象会出现问题,需要将父类对象强制转换为某个子类对象,这种方式被称为显示类型转换。当使用显式类型转换向下转型时,必须向编译器指明将父类对象转换为哪一种类型的子类对象。

练习3:创建一个旅游胜地类,将其强制转换为九寨沟类,并介绍九寨沟,运行效果如下:

class travel{
    public static void introduce(String t){
        System.out.println(t+"四季景色都十分迷人。");
        System.out.println("春时嫩芽点绿,"+"瀑流轻快;");
        System.out.println("夏来绿荫围湖,"+"莺飞燕舞;");
        System.out.println("秋至红叶铺山,"+"彩琳满目;");
        System.out.println("冬来雪裹山峦,"+"冰瀑如玉;");
        System.out.println(t+"是世界闻名的旅游胜地之一。");
    }
}
public class JiuZhaiGou extends travel{
    public static void main(String args[]){
        System.out.println("中国的旅游胜地有很多:");
        travel t=new JiuZhaiGou();
       // System.out.println(t);
        JiuZhaiGou j=(JiuZhaiGou) t;
        j.introduce("九寨沟");
    }
}

4)instanceof关键字

当在程序中执行向下转型操作时,如果父类对象不是子类的实例,就会发生ClassCastException异常,所以在执行向下转型之前需要使用instanceof关键字判断父类对象是否为子类的实例。instanceof关键字还可以判断某个类是否实现了某个接口。instanceof关键字的语法格式如下:

myobject instanceof ExampleClass

myobject:某类的对象引用;

ExampleClass:某个类

使用instanceof关键字的表达式返回值为布尔值。如果返回值为true,说明myobject对象为ExampleClass的实例;如果返回值为false,说明myobject对象不是ExampleClass的实例。

练习1:判断"鸡是不是鸟"并阐明依据(鸡是鸟的子类,所以鸡是鸟)。

class Bird{//创建鸟类

}
public class Chicken extends Bird{//创建鸟的子类:鸡类
    public static void main(String args[]){
        //创建鸡类对象
        Chicken c=new Chicken();
        if(c instanceof Bird){//判断子类鸡类对象是否为鸟类的实例
            Bird b=(Bird) c;

        }
       //
        System.out.println(c instanceof Bird);
        System.out.println("鸡是鸟的子类,所以鸡是鸟。");
    }
}

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

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

相关文章

最小割问题合集,最大权闭合图,最大密度子图,最小权点覆盖,最大权独立子图,OJ练习,代码详解

文章目录 零、回顾1、流网络的割2、最小割问题 一、最小割的应用1.1POJ1966 -- Cable TV Network1.1.1原题链接1.1.2思路分析1.1.3AC代码 1.2ZOJ 2676 Network Wars1.2.1原题链接1.2.2思路分析1.2.3AC代码 1.3OPTM - Optimal Marks1.3.1原题链接1.3.2思路分析1.3.3AC代码 二、最…

【网站项目】305银行账目账户管理系统

🙊作者简介:拥有多年开发工作经验,分享技术代码帮助学生学习,独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。🌹赠送计算机毕业设计600个选题excel文件,帮助大学选题。赠送开题报告模板&#xff…

对称加密算法的原理和优缺点

对称加密算法是现代信息安全领域中的一项核心技术,它通过使用相同的密钥进行数据的加密和解密操作,确保了信息在传输过程中的安全性和保密性。在这篇文章中,我们将对对称加密算法的基本原理、常见类型、应用场景以及优缺点进行详细的探讨。 基…

[Linux]条件变量:实现线程同步(什么是条件变量、为什么需要条件变量,怎么使用条件变量(接口)、例子,代码演示(生产者消费者模型))

目录 一、条件变量 1.什么是条件变量 故事说明 2、为什么需要使用条件变量 竞态条件 3.什么是同步 饥饿问题 二、条件变量的接口 1.pthread_cond_t 2.初始化(pthread_cond_init) 3.销毁(pthread_cond_destroy) 4.等待…

【JSON2WEB】11 基于 Amis 角色功能权限设置页面

【JSON2WEB】01 WEB管理信息系统架构设计 【JSON2WEB】02 JSON2WEB初步UI设计 【JSON2WEB】03 go的模板包html/template的使用 【JSON2WEB】04 amis低代码前端框架介绍 【JSON2WEB】05 前端开发三件套 HTML CSS JavaScript 速成 【JSON2WEB】06 JSON2WEB前端框架搭建 【J…

网安小白入门课程/ Web渗透0基础就业班

想从事渗透相关工作,却不知从何学起?网上自学资料又旧又乱, 学起来时间周期长、效果差?到底学到什么程度才能找到工作? 知识又杂又乱,花了不少时间学习出来却很难成体系? 独自学习枯燥无味&a…

HomeLink项目部署和发布的完整流程

由于Java项目的配置较为繁琐,长时间不使用可能会忘记,因此我特意总结了一下配置流程。 1.软件环境: myeclipse-10.7.1-offline-installer-windows(直接安装) apache-tomcat-7.0.65-windows-x64(Tomcat下载安装以及配置-CSDN博客) JDK(Myeclipse自带…

openGauss学习笔记-252 openGauss性能调优-使用Plan Hint进行调优-Scan方式的Hint

文章目录 openGauss学习笔记-252 openGauss性能调优-使用Plan Hint进行调优-Scan方式的Hint252.1 功能描述252.2 语法格式252.3 参数说明252.4 示例 openGauss学习笔记-252 openGauss性能调优-使用Plan Hint进行调优-Scan方式的Hint 252.1 功能描述 指明scan使用的方法&#…

对 Transformer 中位置编码 Position Encoding 的理解

目录 什么是位置编码 Position Encoding 一、将绝对位置编码加在 Transformer 的输入端 (Sinusoidal 位置编码或可学习位置编码) 二、将绝对位置编码乘在 q k v (RoPE 位置编码) 三、将相对位置编码加在注意力权重 (ALiBi 位置编码) 什么是位置编码 Position Encoding Tr…

Hive3.0.0出库库表中timestamp字段读取为null

在利用sqoop1.99.7做数据迁移的时候,从mysql导出表格到hive建立对应的表格,字段中使用了timestamp类型,在读取数据的时候,发现数据为null。查找问题方法如下: 1、查询库表字段类型 命令:desc tablen…

如何避免SQL注入攻击?

🐓序言 当涉及到数据库操作时,防止SQL注入攻击至关重要。SQL注入是一种常见的网络安全威胁,攻击者通过在用户输入中插入恶意的SQL代码,从而可以执行未经授权的数据库操作。 🐓避免方式 使用参数化查询 使用参数化查询…

js实现拖放效果

dataTransfer对象 说明:dataTransfer对象用于从被拖动元素向放置目标传递字符串数据。因为这个对象是 event 的属性,所以在拖放事件的事件处理程序外部无法访问 dataTransfer。在事件处理程序内部,可以使用这个对象的属性和方法实现拖放功能…

基于Java在线玩具商城系统设计与实现(源码+部署文档)

博主介绍: ✌至今服务客户已经1000、专注于Java技术领域、项目定制、技术答疑、开发工具、毕业项目实战 ✌ 🍅 文末获取源码联系 🍅 👇🏻 精彩专栏 推荐订阅 👇🏻 不然下次找不到 Java项目精品实…

Java 基础学习(二十)Maven、XML与WebServer

1 Maven 1.1 什么是Maven 1.1.1 Maven概述 Maven是一种流行的构建工具,用于管理Java项目的构建,依赖管理和项目信息管理。它使用XML文件来定义项目结构和构建步骤,并使用插件来执行各种构建任务。Maven可以自动下载项目依赖项并管理它们的…

Spring 事务传播行为

实现原理 : Aop (TransactionInterceptor) 实现 使用spring声明式事务注意事项 同一个bean中的方法调用必须重新声明一个bean调用、否则后续方法调用的事务默认使用第一个第二个不生效 package com.cloud.person.service.impl;import com.cloud.person.dao.S1Mapper; import…

【Linux】详细分析/dev/loop的基本知识 | 空间满了的解决方法

目录 前言1. 基本知识2. 内存满了2.1 清空2.2 扩增 3. 彩蛋 前言 服务器一直down机,翻找日志文件一直找不到缘由,最终发现是挂载的内存满了,那本身这个文件就什么用呢? 1. 基本知识 /dev/loop是一种特殊的设备文件,…

Linux环境开发工具之gcc/g++

前言 我们前面介绍了yum和vim,可以在Linux上安装和卸载软件了也可以在vim上写C/C代码了!但代码写完后如何编译呢?这就是我们今天来介绍gcc和g! 本期内容介绍 gcc和g 程序的翻译过程 动静态库的链接 一、gcc和g 1.1什么是gcc和g…

mysql-->highgo迁移

1、迁移工具免安装,解压双击迁移工具,会进入如下界面:migration.rar 2、新建组–>创建新的服务 3、在创建好的服务下,新建数据库连接,建立源表和目标表 4、这一步是获取源库(Mysql数据库)与目标库(瀚高数据库&…

Web开发基本流程

Web是全球广域网,能够通过浏览器访问的网站。我们要访问网站,首先要在浏览器输入对应的域名。 浏览器也是一个程序,京东的网站也是一个程序,在京东那边电脑运行着,我们只是通过浏览器远程访问。京东的程序由三个部分组…

Thread类中start方法和run方法的源码简单解读,联系和区别

我们可以打开idea,按住ctrl将光标移至所查方法上,单击右键,即可查看这两个方法的源码: 1. start方法源码 我们从上至下分析一下: 这个threadStatus是一个int型的变量来表示线程是否开始,0为没有开始,非0为开始,因此当threadStatus不为0时,会抛出非法开始线程的异常. group对象…