day12_oop_抽象和接口

news2024/9/28 23:26:46

今日内容

零、 复习昨日
一、作业
二、抽象
三、接口

零、 复习昨日

final的作用

  • 修饰类,类不能被继承
  • 修饰方法,方法不能重写
  • [重点]修饰变量/属性,变成常量,不能更改

static修饰方法的特点

  • static修饰的方法,可以通过类名调用

static修饰的属性特点

  • 在内存只有一份,被该类的所有对象共享

多态效果形成的前提

  • 继承
  • 重写
  • 向上转型

多态使用的场景

  • 方法的参数列表是父类类型,调用方法传参数传入子类对象
  • 数组是父类类型,数组存储子类对象
  • 方法的返回值是父类类型, 返回时子类对象

什么叫向下转型?如何才能转型成功?

  • 父类类型转成子类类型,需要强制转换
  • 先向上转型再向下转型,才可以成功

一、作业

见代码

二、抽象类

2.1 介绍

抽象: 不好理解不够具体看不懂

抽象类(abstract): 这个类是抽象的,方法与之前方法不一样,有点看不明白

2.2 语法

  • 属性没有抽象性,不能被abstract修饰
  • 抽象方法就是没有方法体且被abstract修饰的方法
  • 抽象方法必须放在抽象类中,抽象类需要使用abstract修饰
  • 抽象类中可以有正常方法的
  • 抽象类也可以构造方法,但是不能被new直接创建对象
  • 抽象类还是类!!!

// 抽象类(父类)

public abstract class Animal {

    int age;// 属性不能被抽象修饰

    // 抽象方法
    public abstract void eat();

    // 正常方法
    public void move(){
        System.out.println("动物移动" );
    }

    // 构造方法
    public Animal(){
        System.out.println("Animal() 抽象类构造执行了" );
    }
}

抽象类有抽象方法,正常方法,构造方法,但是不能创建对象,它有啥用?

主要是用来被子类继承的

  • 子类可以继承抽象类
  • 继承抽象类后要么定义子类为抽象类要么就实现(implement)抽象方法

// Dog类

// 继承抽象类
public class Dog extends Animal{
    // 实现抽象方法(重写)
    @Override
    public void eat() {
        System.out.println("狗吃骨头" );
    }
}

// 测试类


    public static void main(String[] args) {
        // 创建抽象类对象
        // 发现不可以!!!
        // Animal animal = new Animal();

        // 创建子类
        Dog dog = new Dog( );
        dog.eat();// 调用自己重写过的方法
        dog.move();// 调用父类中的方法
    }

2.3 使用总结

抽象类有方法,有个构造但是创建对象,他有什么用处?

  • 被继承!!!
  • 当做父类引用去使用—> 多态的场景下都可以使用抽象
    • 比如之前写的那些类(动物类,员工类,形状类等等父类方法其实都会被子类重写)

image-20240305103851139

既然有无抽象与之前写法用法都是多态,没有太多区别,那么为什么还需要抽象?

  • 抽象有一层限制的思想以及作用,即继承抽象类,必须重写

使用上的经验总结:

  • 对于别人写好的抽象类,如果要用,就要知道抽象类可以继承,然后重写抽象方法即可
  • 如果自己要设计代码,什么时候需要设计抽象类?
    • 设计思想: 抽象差异化,具体共同点
    • 当设计时发现有很多类用到了重复的代码,此时要想到将重复代码抽象到父类
    • 那要不要设计成抽象父类?得看情况
      • 如果子类中都需要使用同一个公共的方法,即子类不需要改变就能用的方法,那就把设计在父类中 具体共同点
      • 如果子类都需要使用一个方法,但是父类方法又不适用即子类需要重写的时候,那就把方法设计成抽象方法,此时就需要抽象类 抽象差异化

2.4 练习

将之前所写的多态的题目(员工类,形状类,动物类,兽医类)将父类变成抽象类,方法变成抽象方法,练习

三、接口

接口是比抽象类更抽象的一种文件,接口不是类

java的数据类型

  • 基本数据类型
  • 引用数据类型: 数组,类,接口

3.1 语法特征

  • 接口不是类,不需要class修饰而是interface
  • 接口所有属性都默认被public static final修饰,即全都是静态常量
  • 接口中所有方法都是抽象方法,且默认都被public abstract修饰
  • 不能定义构造方法,不能创建对象

// 接口

public interface TypeC {

    // 属性
    public static final int length = 1;
    String brand = "HUAWEI";

    // 方法
    public abstract void chongdian();

    // 没有构造
    // public TypeC(){
    //
    // }
}

接口存在的意义? 就是为了让子类使用,去实现接口

// 子类

  • 实现接口使用**implements**关键词
  • 子类实现接口,要重写全部的抽象方法
  • 类可以**允许同时实现多个接口(**多实现)
  • 类还可以在继承的同时再实现接
// 子类继承类,同时实现接口,且允许多实现
public class Phone extends Dianzi implements TypeC,Tongxin{
    @Override
    public void chongdian() {
        System.out.println("手机充电" );
    }

    @Override
    public void chuansu() {
        System.out.println("传输数据" );
    }

    @Override
    public void tongxin() {
        System.out.println("可以卫星通信" );
    }
}

特殊的, 接口是可以继承接口的,且是允许多继承

image-20240305114101017

3.2 作用?

目前编码而言: 就当做一个父接口在多态中使用

  • 即接口也可以当做父引用指向子类对象

image-20240305161228090

既然都是当多态去使用,抽象和接口又什么区别?

  • 抽象是类,接口不是类,类有单继承限制,接口没有,且允许继承同时再实现,这样呢可以对代码扩展能力有了提升
  • 抽象是类,类是一个模板是一个统称,描述一类东西的;接口是一种规范,约束,能力的体现,所有在设计代码时,代表物体,实体的设计成类,代表能力的设计成接口

接口往后,往深层次理解,接口是一种规范,约定! 按照规范去设计实现,就可以跟人家使用接口的物体进行对接

  • 电脑 有USB接口,外设厂家按照USB接口实现创建了设备(键盘,鼠标,麦克风等等),这些外设就可以和电脑产生联系 --> 这里的USB接口作用就是规范,放两者产生关系 关联的

3.3 练习

pdf练习题

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

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

相关文章

AI应用开发-python字符串转字典

AI应用开发相关目录 本专栏包括AI应用开发相关内容分享,包括不限于AI算法部署实施细节、AI应用后端分析服务相关概念及开发技巧、AI应用后端应用服务相关概念及开发技巧、AI应用前端实现路径及开发技巧 适用于具备一定算法及Python使用基础的人群 AI应用开发流程概…

10 OpenCV 形态学的应用

文章目录 算子形态学提取直线示例 算子 adaptiveThreshold 二值化算子 adaptiveThreshold(src, dstNone,maxValue, adaptiveMethod, thresholdType, blockSize, C, ) /* *src:灰度化的图片 *dst:输出图像,可选 *maxValue:满足条件…

冒泡经典题

📑前言 本文主要是【】——简单使用的文章,如果有什么需要改进的地方还请大佬指出⛺️ 🎬作者简介:大家好,我是听风与他🥇 ☁️博客首页:CSDN主页听风与他 🌄每日一句:狠…

2023年09月CCF-GESP编程能力等级认证Scratch图形化编程三级真题解析

本文收录于专栏《Scratch等级认证CCF-GESP真题解析》,专栏总目录・点这里 一、单选题(共15题,共30分) 第1题 我国第一台大型通用电子计算机使用的逻辑部件是( )。 A:集成电路 B:大规模集成电路 C:晶体管 D:电子管 答案:D 第2题 下列流程图的输出结果是?( ) …

H5小游戏,象棋

H5小游戏源码、JS开发网页小游戏开源源码大合集。无需运行环境,解压后浏览器直接打开。有需要的,私信本人,发演示地址,可以后再订阅,发源码,含60+小游戏源码。如五子棋、象棋、植物大战僵尸、开心消消乐、扑鱼达人、飞机大战等等 <!DOCTYPE html PUBLIC "-//W3C/…

MySQL相关问题

MySQL相关问题 一、MySQL支持哪些存储引擎&#xff1f;二、MySQL是如何执行一条SQL的&#xff1f;三、MySQL数据库InnoDB存储引擎是如何工作的&#xff1f;四、如果要对数据库进行优化&#xff0c;该怎么优化&#xff1f;五、MySQL如何定位慢查询&#xff1f;六、如何分析MySQL…

Java生成 word报告

Java生成 word报告 一、方案比较二、Apache POI 生成三、FreeMarker 生成 在网上找了好多天将数据库信息导出到 word 中的解决方案&#xff0c;现在将这几天的总结分享一下。总的来说&#xff0c;Java 导出 word 大致有 5 种。 一、方案比较 1. Jacob Jacob 是 Java-COM Bri…

洛谷:P3068 [USACO13JAN] Party Invitations S(枚举、前缀和)

这题我们数据范围太大&#xff0c;用二维肯定是不行的&#xff0c;我们可以采用一维线性存储。 如题意&#xff0c;我们可以将每组奶牛编号都存在一维数组里面&#xff0c;只需记录每组的头尾指针就可以了。 如题中样例我们就可以存储成1 3 3 4 1 2 3 4 5 6 7 4 3 2 1 然后第…

C语言——结构体(位段)、联合体、枚举

hello&#xff0c;大家好&#xff01;我是柚子&#xff0c;今天给大家分享的内容是C语言中的自定义类型结构体、联合体以及枚举&#xff0c;有什么疑问或建议可以在评论区留言&#xff0c;会顺评论区回访哦~ 一、结构体 struct a.结构体声明 不同于数组的是&#xff0c;结构…

删除有序链表中重复的数字Ⅱ

题目 题目链接 删除有序链表中重复的元素-II_牛客题霸_牛客网 题目描述 代码实现 class Solution { public:/*** 代码中的类名、方法名、参数名已经指定&#xff0c;请勿修改&#xff0c;直接返回方法规定的值即可** * param head ListNode类 * return ListNode类*/ListNod…

旋转链表00

题目链接 旋转链表 题目描述 注意点 链表中节点的数目在范围 [0, 500] 内 解答思路 因为k可能比链表长度大&#xff0c;所以需要先找到链表的长度len&#xff0c;同时储存尾节点&#xff08;需要将尾节点与首节点相连&#xff09;&#xff0c;根据k % len计算出链表需要向…

O2OA(翱途)通过服务来调用接口实现单点登录案例

本文介绍O2OA服务管理中&#xff0c;接口的权限设定和调用方式。 创建接口 具有服务管理设计权限的用户&#xff08;具有ServiceManager角色或Manager角色&#xff09;打开“服务管理平台”&#xff0c;进入接口配置视图&#xff0c;点击左上角的新建按钮&#xff0c;可创建一…

langchain学习笔记(十一)

关于langchain中的memory&#xff0c;即对话历史&#xff08;message history&#xff09; 1、 Add message history (memory) | &#x1f99c;️&#x1f517; Langchain RunnableWithMessageHistory&#xff0c;可用于任何的chain中添加对话历史&#xff0c;将以下之一作为…

IntelliJ IDEA插件php golang python shell docker ignore UML plantuml等插件安装

IntelliJ IDEA插件php golang python shell docker ignore UML plantuml等插件安装 有的插件,需要代理才能搜索和下载 设置代理 不然插件搜索不到&#xff0c;也可能下载不了 Preferences -->Plugins --> Browse repositorise… --〉HTTP Proxy Settings… 选择 Manual…

FreeRTOS操作系统学习——内存管理

C库函数与FreeRTOS内存管理区别 在C语言的库函数中&#xff0c;有mallc、free等函数可以申请以及释放内存空间&#xff0c;那么这为什么不适用于FreeRTOS的内存管理呢&#xff1f; 不适合用在资源紧缺的嵌入式系统中这些函数的实现过于复杂、占据的代码空间太大并非线程安全的…

软考59-上午题-【数据库】-小结+杂题

一、杂题 真题1&#xff1a; 真题2&#xff1a; 真题3&#xff1a; 真题4&#xff1a; 真题5&#xff1a; 真题6&#xff1a; 真题7&#xff1a; 真题8&#xff1a; 二、数据库总结 考试题型&#xff1a; 1、选择题&#xff08;6题&#xff0c;6分&#xff09; 2、综合分析题…

LeetCode 热题 100 (尽量ACM模式刷) 持续更新!!!

LeetCode 热题 100 哈希hash 1 两数之和 /** 给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出和为目标值target的那两个整数&#xff0c;并返回它们的数组下标。* 你可以假设每种输入只会对应一个答案。但是&#xff0c;数组中同一个元素在答案…

Claude3登顶榜首,上亚马逊云科技快人一步体验!

AI大模型春秋争霸已经进入了新的赛季&#xff0c;2024年3月4日&#xff0c;在一夜之间&#xff0c;Anthropic Claude 3提前"阻击"GPT-5 **Claude 3 在数学问题、编程练习和科学推理等标准化评估方面超越了现有模型。**客户可以使用人工智能驱动的响应&#xff0c;以自…

ZYNQ--关于一些SDK调试问题记录

Debug configuaration中没有debug applicaton 问题如下图&#xff1a; 解决方法&#xff1a; 在Target Setup中的Debug Type中选择如下即可 注意选完之后application中必须勾选运行内核&#xff0c;否则不运行main文件。

可以设置提醒的电脑桌面便签备忘录软件哪个好用?

对于我们职场人来说&#xff0c;每天的时间都很紧张且有价值&#xff0c;如何有效地利用它们&#xff0c;让时间不被浪费流逝掉&#xff0c;成为越来越多的人在思考的一个问题。为了有效管理时间以及各项待办事务&#xff0c;一些人会使用可以设置提醒的电脑桌面便签备忘录软件…