【进阶篇-Day2:JAVA包、抽象类、接口、多态】

目录

  • 1、包
  • 2、抽象类
    • 2.1 抽象类的定义
    • 2.2 抽象类的注意事项
    • 2.3 abstract关键字的冲突
  • 3、接口
    • 3.1 接口的介绍
    • 3.2 接口中的成员特点
      • 3.2.1 接口中的成员特点
      • 3.2.2 类和接口之间的各种关系
    • 3.3 抽象类和接口的对比
  • 4、多态
    • 4.1 多态的介绍
    • 4.2 多态的前提
    • 4.3 多态的成员访问特点
    • 4.4 多态的好处和弊端
    • 4.5 多态中的转型
  • 5、练习

1、包

在这里插入图片描述

2、抽象类

2.1 抽象类的定义

在这里插入图片描述

下面是抽象类及抽象方法的例子:
在这里插入图片描述

定义格式:
在这里插入图片描述

2.2 抽象类的注意事项

在这里插入图片描述

2.3 abstract关键字的冲突

在这里插入图片描述

3、接口

3.1 接口的介绍

在这里插入图片描述

在这里插入图片描述

注:(1)
在这里插入图片描述在这里插入图片描述
(2)其实接口类似于只有抽象方法的抽象类,但是通常我们把类和接口的关系:叫做实现接口,而把抽象类和类的关系:叫做继承关系。因此一个类既可以实现接口,同时也可以继承抽象类,如下所示:

public class AbstractA {
}interface InterfaceB{}public class C extends AbstractA implements InterfaceB {}

3.2 接口中的成员特点

3.2.1 接口中的成员特点

在这里插入图片描述

3.2.2 类和接口之间的各种关系

(1)
在这里插入图片描述

(2)
在这里插入图片描述

interface A{void show();
}interface B{void show();
}class Fu{public void show(){System.out.println("show......");}
}class Zi extends Fu implements A, B{}

(3)在这里插入图片描述

interface InterA{void showA();
}interface InterB{void showB();
}interface InterC extends InterA, InterB{void showC();
}class InterCImpl implements InterC{@Overridepublic void showA() {}@Overridepublic void showB() {}@Overridepublic void showC() {}
}

3.3 抽象类和接口的对比

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

4、多态

4.1 多态的介绍

在这里插入图片描述

从上面的例子可以看出,对于同一个引用数据类型(左边),可以new不同的对象(右边)。因此我就有下面的两个疑问:
在这里插入图片描述
针对上述两个问题,在4.2进行回答。

4.2 多态的前提

对于上述的两个问题,需要有下面的前提才可以实现左右类型不一致时,可以创建对象,并调用同一套方法:
在这里插入图片描述

有了上述的前提后,就可以实现多态了,多态会有两种表现形式:
在这里插入图片描述

4.3 多态的成员访问特点

在这里插入图片描述

注:
对于成员方法,在编译的时候,会检查父类中有没有这个方法:

  • 1、没有:编译报错
  • 2、有:编译通过,但是运行的时候,一定会执行子类的方法逻辑

原因:担心调用的方法,在父类中是一个抽象方法。

  • 这里还有个问题,那如果多态创建对象,调用静态成员,会是什么样呢?

答:结论是会调用父类的中的静态成员。

原因:静态的成员,可以使用对象名调用,但这是一种假象,因为在生成字节码文件后,会自动将对象名调用,改成类名调用。因此会调用父类中的静态成员。

注:因此,静态的成员,推荐类名进行调用。

4.4 多态的好处和弊端

在这里插入图片描述
在这里插入图片描述

那面对这种弊端,java是怎么解决的呢,可以使用多态的转型,下面接着看。

4.5 多态中的转型

在这里插入图片描述

其实就是将父类型,强转为子类型。

在这里插入图片描述

解决方法是,使用instanceof关键字:
在这里插入图片描述

5、练习

在这里插入图片描述

import com.itheima.service.Pay;
import com.itheima.service.impl.BankPayImpl;
import com.itheima.service.impl.CreditCardPayImpl;
import com.itheima.service.impl.PlatformPayImpl;
import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc = new Scanner(System.in);Pay pay = null;lo:while (true){System.out.println("请选择支付方式:1、支付平台支付;2、银行卡网银支付;3、信用卡快捷支付");String payMethod = sc.next();switch (payMethod){case "1":pay = new PlatformPayImpl();break lo;case "2":pay = new BankPayImpl();break lo;case "3":pay = new CreditCardPayImpl();break lo;default:System.out.println("您的输入有误,请重新输入!");break;}}System.out.println("请输入您的支付金额:");double payAmount = sc.nextDouble();pay.pay(payAmount);}
}

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

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

相关文章

vuInhub靶场实战系列--Kioptrix Level #1

免责声明 本文档仅供学习和研究使用,请勿使用文中的技术源码用于非法用途,任何人造成的任何负面影响,与本人无关。 目录 免责声明前言一、环境配置1.1 靶机信息1.2 靶场配置 二、信息收集2.1 主机发现2.2 端口扫描2.2.1 masscan2.2.2 nmap 2.3 指纹识别2.4 目录扫描2.4.1 dirb…

华为云服务器-云容器引擎 CCE环境构建及项目部署

1、切换地区 2、搜索云容器引擎 CCE 3、购买集群 4、创建容器节点 通过漫长的等待(五分钟左右),由创建中变为运行中,则表明容器已经搭建成功 购买成功后,返回容器控制台界面 5、节点容器管理 6、创建redis工作负载 7、创建mysql工作负载 8、…

E: 仓库 “http://download...graphics:/darktable/xUbuntu_22.04 InRelease” 没有数字签名

问题 Ubuntu22.04装了darktable软件没装好,已经卸载了但是没卸载干净,终端使用 sudo apt update 出现的问题: 解决: sudo nano /etc/apt/sources.list.d/*darktable*.list找到了该软件的相关仓库条目:直接给他注释掉就行了。

重构大学数学基础_week04_从点积理解傅里叶变换

这周我们来看一下傅里叶变换。傅里叶变换是一种在数学和许多科学领域中广泛应用的分析方法,它允许我们将信号或函数从其原始域(通常是时间域或空间域)转换到频域表示。在频域中,信号被表示为其组成频率的幅度和相位,这…

Nvidia/算能 +FPGA+AI大算力边缘计算盒子:大疆RoboMaster AI挑战赛

NVIDIA Jetson TX2助力机器人战队斩获RoboMaster AI挑战赛冠亚军 一个汇聚数百万机器人专家与研究人员的赛场,一场兼具工程、策略和团队挑战的较量,说的正是近日刚刚在澳大利亚布里斯本ICRA大会上闭幕的大疆RoboMaster AI挑战赛今年的冠军I Hiter以及亚军…

进程通信(IPC-Inter Process Communication)

进程之间的通信通过内核空间实现 IPC技术 ①管道(匿名管道/命名管道-FIFO队列) ②System V IPC(消息队列、信号量和共享内存) ③套接字(UNIX套接字&Internet套接字) ※信号 软中断,信号提供了一种处理异步事件的方法,作为进程通信的一种机制&am…

LeetCode714买卖股票的最佳时机含手续费

题目描述 给定一个整数数组 prices,其中 prices[i]表示第 i 天的股票价格 ;整数 fee 代表了交易股票的手续费用。你可以无限次地完成交易,但是你每笔交易都需要付手续费。如果你已经购买了一个股票,在卖出它之前你就不能再继续购买…

责任链模式(行为型)

目录 一、前言 二、责任链模式 三、总结 一、前言 责任链模式(Chain of Responsibility Pattern)也叫职责链模式,是一种行为型设计模式,职责链模式使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦…

第二十一讲:编译和链接

第二十一讲:编译和链接 1.翻译环境和运行环境1.1翻译环境1.2编译1.2.1预编译(预处理)1.2.2编译1.2.2.1词法分析1.2.2.2语法分析1.2.2.3语义分析 1.2.3汇编 1.3链接1.4运行环境1.5#define符号1.5.1#define的使用和原理1.5.2#define使用的陷阱注…

Python学习从0开始——Kaggle机器学习004总结2

Python学习从0开始——Kaggle机器学习004总结2 一、缺失值二、分类变量2.1介绍2.2实现1.获取训练数据中所有分类变量的列表。2.比较每种方法方法1(删除分类变量)方法2(序数编码)方法3独热编码 三、管道3.1介绍3.2实现步骤1:定义预处理步骤步骤2:定义模型步骤3:创建和评估管道 四…

【JAVA】javadoc,如何生成标准的JAVA API文档

目录 1.什么是JAVA DOC 2.标签 3.命令 1.什么是JAVA DOC 当我们写完JAVA代码,别人要调用我们的代码的时候要是没有API文档是很痛苦的,只能跟进源码去一个个的看,一个个方法的猜,并且JAVA本来就不是一个重复造轮子的游戏&#…

探索LLM 在金融领域有哪些潜在应用——通过使用 GPT-4 测试金融工程、市场预测和风险管理等 11 项任务

概述 近年来,用于自然语言理解和生成的人工智能技术在自然语言处理领域取得了突破性进展,OpenAI 的 GPT 和其他大规模语言模型在该领域取得了显著进步。这些模型通过先进的计算能力和算法,展示了处理复杂任务的能力,如理解复杂语…

vue2组件封装实战系列之tag组件

作为本系列的第一篇文章,不会过于的繁杂,并且前期的组件都会是比较简单的基础组件!但是不要忽视这些基础组件,因为纵观elementui、elementplus还是其他的流行组件库,组件库的封装都是套娃式的,很多复杂组件…

关于python中的关键字参数

在python语言中存在两种传参方式: 第一种是按照先后顺序来传参,这种传参风格,称为“位置参数”这是各个编程语言中最普遍的方式。 关键字传参~按照形参的名字来进行传参! 如上图所示,在函数中使用关键字传参的最大作…

计算机网络 ——网络层(IPv4地址)

计算机网络 ——网络层(IPv4地址) 什么是IPv4地址IP地址的分类特殊的IP地址 查看自己的IPv4地址 我们今天来看IPv4地址: 什么是IPv4地址 IPv4(Internet Protocol version 4)是第四版互联网协议,是第一个被…

使用CodeGen进行程序综合推理

Program Synthesis with CodeGen — ROCm Blogs (amd.com) CodeGen是基于标准Transformer的自回归语言模型家族,用于程序合成,正如作者所定义的,它是一种利用输入-输出示例或自然语言描述生成解决指定问题的计算机程序的方法。 我们将测试的…

mqtt-emqx:paho.mqttv5的简单例子

# 安装emqx 请参考【https://blog.csdn.net/chenhz2284/article/details/139551293?spm1001.2014.3001.5502】 # 下面是示例代码 【pom.xml】 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</…

spark-3.5.1+Hadoop 3.4.0+Hive4.0 分布式集群 安装配置

Hadoop安装参考: Hadoop 3.4.0HBase2.5.8ZooKeeper3.8.4Hive4.0Sqoop 分布式高可用集群部署安装 大数据系列二-CSDN博客 一 下载:Downloads | Apache Spark 1 下载Maven – Welcome to Apache Maven # maven安装及配置教程 wget https://dlcdn.apache.org/maven/maven-3/3.8…

mqtt-emqx:简单安装emqx

安装依赖 yum install -y epel-release libatomic下载 cd /chz/install/emqx wget https://www.emqx.com/en/downloads/broker/5.7.0/emqx-5.7.0-el7-amd64.tar.gz解压 mkdir -p emqx && tar -zxvf emqx-5.7.0-el7-amd64.tar.gz -C emqx后台运行 cd /chz/install/e…

分布式事务Seata中XA和AT模式介绍

Seata中XA和AT模式介绍 分布式事务介绍分布式解决方案解决分布式事务的思路Seata的架构Seata中的XA模式Seata的XA模型流程XA模式优缺点实现XA模式 Seata中的AT模式Seata中的AT模式流程实现AT模式AT模式优缺点 AT模式与XA模式的区别 分布式事务介绍 分布式事务&#xff0c;就是…