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

news2025/1/13 7:51:21

目录

  • 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{

    @Override
    public void showA() {
    }

    @Override
    public void showB() {
    }

    @Override
    public 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.coloradmin.cn/o/1803035.html

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

相关文章

Java线程本地变量ThreadLocal

ThreadLocal ThreadLocal有什么用 通常情况下,我们创建的变量是可以被任何一个线程访问并修改的。如果想实现每一个线程都有自己的专属本地变量该如何解决呢? JDK中的ThreadLocal类正是为了解决这样的问题,ThreadLocal类主要解决的就是让每…

SpringBoot+Vue网上购物商城系统(前后端分离)

技术栈 JavaSpringBootMavenMySQLMyBatisVueShiroElement-UI 系统角色对应功能 用户商家管理员 系统功能截图

测试基础11:测试用例设计方法-等价类划分

课程大纲 1、概述 1.1测试用例设计方法意义 穷举测试:每种输入都测一次。最完备,但不现实。 使用设计方法,用最少的数据(成本),实现最大的测试覆盖。 1.2常用设计方法 ①等价类划分 ②边界值分析 ③错误推…

vue3自定义组件并全局导入

自定义组件&#xff1a;幕布 涉及的效果&#xff1a;点击出现幕布并且内容可变动 使用的技术&#xff1a;vue3的slot componentcomponents curtain&#xff08;组件页面&#xff09;&#xff1a; <template><div class"curtain"><slot></s…

在UI界面中实现3d人物展示

简要原理(设置双摄像机): 为需要展示的3D人物单独设置一个摄像机(只设置为渲染人物层级),主要摄像机的方向与人物方向一致,但摄像机需要需要旋转180,设置的角度自行进行微调创建一个Render Texture类型的组件用于存储摄像机渲染的内容UI上设置需要展示的图片区域,图片…

线性表和链表

一&#xff0c;线性结构 1.Array Array文档&#xff1a;可以自行阅读相关文档来了解Array class array.array(typecode[, initializer]) array.append(x)&#xff1a;添加元素到数组末尾 array.count(x)&#xff1a;计算元素出现次数 array.extend(iterable)&#xff1a;将迭代…

ipables防火墙

一、Linux防火墙基础 Linux 的防火墙体系主要工作在网络层&#xff0c;针对 TCP/IP 数据包实施过滤和限制&#xff0c;属于典 型的包过滤防火墙&#xff08;或称为网络层防火墙&#xff09;。Linux 系统的防火墙体系基于内核编码实现&#xff0c; 具有非常稳定的性能和高效率&…

SpringBoot的Mapper文件什么时候需要使用@Param注解

解决&#xff1a;nested exception is org.apache.ibatis.binding.BindingException: Parameter ‘XXX‘ not found 关于加注解&#xff0c;其他博客说的很清楚&#xff01;但是有的人会遇见明明使用的springboot2.x以上版本&#xff0c;仍然提示需要加注解&#xff01;这是为…

SQL Server设置默认Schema (修正运行版)

目录 方法 1&#xff1a;执行 USE 命令 方法 2&#xff1a;执行 ALTER USER 命令 方法 3&#xff1a;在查询中包含Schema 总结 在 SQL Server 中&#xff0c;通过 JDBC 设置会话的默认Schema并不是很直接&#xff0c;但可以使用一些变通方法来实现。以下是一些管理默认Sche…

sub_mch_id 与 sub_appid 不匹配怎么解决

小程序在支付的时候&#xff0c;有时候会碰到&#xff1a;sub_mch_id 与 sub_appid 不匹配的问题。这个问题意味着小程序微信支付时所使用的 sub_mch_id&#xff08;子商户号&#xff09;和 sub_appid&#xff08;小程序的appId&#xff09;不对应。下面就具体介绍如何核对是否…

解决 There is no getter for property named ‘null‘ in ‘class 报错

1. 问题 mybatis-plus在更新删除操作时报错 Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession750ee72a] 2024-06-08 21:03:07 [http-nio-8080-exec-3] ERROR o.a.c.c.C.[.[.[.[dispatcherServlet] - Servlet.service() for servl…

Kubernetes 基础架构最佳实践:从架构设计到平台自动化

本文探讨了如何将DigitalOcean Kubernetes (DOKS)应用于生产环境&#xff0c;并提供实现生产准备&#xff08;production readiness&#xff09;的指导。 规划您的基础架构 Kubernetes 基础架构的规划至关重要&#xff0c;因为它为稳定且可扩展的应用部署平台奠定了基础。通过适…

Python采集东方财富网股票数据建立LSTM模型预测

Python采集东方财富网股票数据建立LSTM模型预测 一、数据爬取流程二、爬虫完整代码三、LSTM模型建模预测3.1 项目背景3.2 建模预测流程3.3 数据预处理3.4 数据可视化3.5 特征工程3.6 数据缩放3.7 数据转换3.8 模型创建3.9 评价模型3.10 可视化结果3.11 总结一、数据爬取流程 先…

107.网络游戏逆向分析与漏洞攻防-装备系统数据分析-装备信息更新的处理

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 如果看不懂、不知道现在做的什么&#xff0c;那就跟着做完看效果 现在的代码都是依据数据包来写的&#xff0c;如果看不懂代码&#xff0c;就说明没看懂数据包…

实战 | 通过微调SegFormer改进车道检测效果(数据集 + 源码)

背景介绍 SegFormer&#xff1a;实例分割在自动驾驶汽车技术的快速发展中发挥了关键作用。对于任何在道路上行驶的车辆来说&#xff0c;车道检测都是必不可少的。车道是道路上的标记&#xff0c;有助于区分道路上可行驶区域和不可行驶区域。车道检测算法有很多种&#xff0c;每…

【Unity3D小功能】Unity3D中UGUI-Text实现打字机效果

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址QQ群&#xff1a;398291828 大家好&#xff0c;我是佛系工程师☆恬静的小魔龙☆&#xff0c;不定时更新Unity开发技巧&#xff0c;觉得有用记得一键三连哦。 一、前言 需求要实现Text的打字机效果&#xff0c;一看居然…

实战 | YOLOv10 自定义数据集训练实现车牌检测 (数据集+训练+预测 保姆级教程)

导读 本文主要介绍如何使用YOLOv10在自定义数据集训练实现车牌检测 (数据集训练预测 保姆级教程)。 YOLOv10简介 YOLOv10是清华大学研究人员在Ultralytics Python包的基础上&#xff0c;引入了一种新的实时目标检测方法&#xff0c;解决了YOLO以前版本在后处理和模型架构方面…

挂上了代理加速器梯子之后,Git clone指令下载仍旧很慢的问题

当你使用了各种代理软件访问诸如Github、Google、油管、推特这些网址&#xff0c;你会发现基本可以访问&#xff0c;只不过是访问速度不同&#xff0c;但是不管你使用什么代理软件&#xff0c;你的git clone指令从Github远程库下载库的速度都不会受到影响。 当使用代理软件访问…

LIP模型动力学方程例子

线性倒立摆(Linear Inverted Pendulum, LIP)模型是用于描述和控制人形机器人步态的重要工具。LIP模型假设质心沿着一条固定的直线运动,并且所有质量集中在质心上。这简化了计算,使得模型更容易用于控制和稳定分析。 LIP模型动力学方程 LIP模型的基本假设是: 机器人的质心…

【原创】海为PLC与RS-WS-ETH-6传感器的MUDBUS_TCP通讯

点击“蓝字”关注我们吧 一、关于RS-WS-ETH-6传感器的准备工作 要完成MODBUS_TCP通讯,我们必须要知道设备的IP地址如何分配,只有PLC和设备的IP在同一网段上,才能建立通讯。然后还要选择TCP的工作模式,来建立设备端和PC端的端口号。接下来了解设备的报文格式,方便之后发送…