4.2学习总结

一.java学习总结

(本次java学习总结,主要总结了抽象类和接口的一些知识,和它们之间的联系和区别)

一.抽象类

1.1定义:

抽象类主要用来抽取子类的通用特性,作为子类的模板,它不能被实例化,只能被用作为子类的超类。

2.概括:

有方法声明,没有方法体”的一类方法统称为抽象方法抽象方法用关键字abstract修饰。需要注意的是,如果一个方法已经确定是抽象方法,那么它绝不能再有方法体,即不能出现大括号,而是只需要在()后面添加一个分号即可

3.注意点:拥有抽象方法的类一定是抽象类;但是抽象类不一定有抽象方法

1.2使用场景

 当父类需要定义一个方法,却不能明确该方法的具体实现细节时,可以将该方法定义为abstract,具体实现细节延迟到子类。(让子类重写这个方法)

public abstract class Animal {
    private String name;
    private int age;

    public Animal() {
    }

    public Animal(String name, int age) {
        this.name = name;
        this.age = age;
    }

    //如果不知道在这个方法中应该写什么,可以通过抽象方法的形式,让子类进行重写
    public abstract void eat();
}

(若父类中定义了一个抽象方法要求其所有非抽象子类都必须重写该抽象方法。否则会报错)

1.3抽象类的特点

1.abstract关键字 : 

 abstract关键字只能用于修饰类和方法,用于声明抽象类和抽象方法。

格式:

修饰符  abstract class 类名()

修饰符  abstract 返回值类型 方法名(形参例表)

2.抽象类不能被实例化,只能创建其子类对象.

3.  如果某个类继承了一个抽象类,那么这个类有两个选择——要么实现父类所有的抽象方法,要么子类本身也定义成抽象类

4.事例

Animal(父类)

public abstract class Animal {
    private String name;
    private int age;

    public Animal() {
    }

    public Animal(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 drink(){
        System.out.println("喝水");
    }

    //如果不知道在这个方法中应该写什么,可以通过抽象方法的形式,让子类进行重写
    public abstract void eat();
}

 子类

//子类Cat
public class Cat extends Animal{
    @Override
    public void eat() {
        System.out.println("猫在吃鱼");
    }
}

//子类Dog
public class Dog extends Animal{

    @Override
    public void eat() {
        System.out.println("狗在吃骨头");
    }
}

//子类Sleep
public class Sleep extends Animal{
    @Override
    public void eat() {
        System.out.println("山羊在吃草");
    }
}

测试

import jdk.nashorn.internal.ir.CatchNode;

public class TEXT {
    public static void main(String[] args) {
        Dog d=new Dog();
        d.setName("小狗");
        d.setAge(1);
        System.out.println(d.getName()+", "+d.getAge());
        d.eat();
        d.drink();

        Cat c =new Cat();
        c.setName("小猫");
        c.setAge(2);
        System.out.println(c.getName()+", "+c.getAge());
        c.eat();
        c.drink();

        Sleep s=new Sleep();
        s.setName("山羊");
        s.setAge(3);
        System.out.println(s.getName()+", "+s.getAge());
        s.eat();
        s.drink();
    }
}

运行结果

总结:抽象类中我们主要学习其抽象方法的使用,  (抽象类中的成员只比非抽象类多一种——抽象方法。其他都和非抽象类一样)

二.接口

2.1定义:

Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)

简单来说:接口就是一种被规范的标准,只要符合这个标准都可以通用,接口的表现在于对行为的抽象.

格式:

定义接口:interface 接口名{ } 

使用接口:class 类名 implements 接口名{ }

 2.2接口的特点:

1.接口中的成员变量

  • 接口中没有成员变量,只要共有静态常量(即默认情况下都有 public static final 这三个关键字修饰)
  • 格式:public static final 常量名=常量值
  • 在接口中定义公有静态常量时,必须在定义时就赋初值。
public interface swim {
    //初始化要赋值
    public static final int num=1;
    
    public abstract void Swim();
}

 

2.接口中的成员方法

 

3.接口中的创建对象

  • 接口不能被实例化.
  • 接口的子类可以是抽象实现类,也可以是非抽象的(非抽象实现类要重写接口中的所有抽象方法)

 

4.接口的继承关系

  • 类与接口之间的关系:多实现(一个类可以实现多个接口,弥补java无法多继承)
  • 接口与接口之间的关系:一个接口可以多继承多个接口(接口 extends 接口1,接口2,接口3...)
  • 继承和实现的区别:继承是父类中的共性内容,实现是父类中的特性(扩展)内容.

2.3实例:

Animal和前面的相同(不展示了)

接口

public interface swim {
    //初始化要赋值
    public static final int num=1;

    public abstract void Swim();
}

子类

//子类Dog
public class Dog extends Animal implements swim{

    public Dog() {
    }

    public Dog(String name, int age) {
        super(name, age);
    }

    @Override
    public void eat() {
        System.out.println("狗在吃骨头!");
    }

    @Override
    public void Swim() {
        System.out.println("狗在狗刨!");
    }
}

//子类Flag
public class Flag extends Animal implements swim{

    public Flag() {
    }

    public Flag(String name, int age) {
        super(name, age);
    }

    @Override
    public void eat() {
        System.out.println("青蛙再吃虫子!");
    }

    @Override
    public void Swim() {
        System.out.println("青蛙在蛙泳!");
    }
}

//子类rabbit
public class rabbit extends Animal{

    public rabbit() {
    }

    public rabbit(String name, int age) {
        super(name, age);
    }

    @Override
    public void eat() {
        System.out.println("兔子在吃草!");
    }

    public void jump(){
        System.out.println("兔子在蹦高!");
    }
}

text

public class Text {
    public static void main(String[] args) {
        Dog d=new Dog("狗剩子",1);
        System.out.println(d.getName()+", "+d.getAge());
        d.eat();
        d.Swim();
        System.out.println("--------------------");

        rabbit r=new rabbit("麻辣兔头",1);
        System.out.println(r.getName()+", "+r.getAge());
        r.eat();
        r.jump();
        System.out.println("--------------------");

        Flag f=new Flag("青蛙王子",2);
        System.out.println(f.getName()+", "+f.getAge());
        f.eat();
        f.Swim();
        System.out.println("--------------------");
    }
}

运行结果:

总结:

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

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

相关文章

【隐私计算实训营008——SCQL】

1.SCQL使用/集成最佳实践 目前SCQL只开放API供用户使用/集成 使用SCDBClient上手体验可以基于SCQL API开发封装白屏产品,或集成到业务链路中 1.1 部署系统 环境配置: 机器配置:CPU/MEM最低8C16G机构之间的网络互通 镜像:secret…

Redis实现高可用之持久化介绍

前言 在生产环境中,为了实现Redis的高可用性,可以采用持久化、主从复制、哨兵模式和 Cluster集群的方法确保数据的持久性和可靠性。这里首先介绍一下使用持久化实现服务器的高可用。 目录 一、Redis 高可用方法 1. 持久化 2. 主从复制 3. 哨兵 4.…

二轮电动自行车充电桩开源系统

文章目录 一、产品功能部分截图1.手机端(小程序、安卓、ios)2.PC端 二、小程序体验账号以及PC后台体验账号1.小程序体验账号2.PC后台体验账号关注公众号获取最新资讯 三、产品简介?1. 充电桩云平台(含硬件充电桩)&…

曲线降采样之道格拉斯-普克算法Douglas–Peucker

曲线降采样之道格拉斯-普克算法Douglas–Peucker 该算法的目的是,给定一条由线段构成的曲线,找到一条点数较少的相似曲线,来近似描述原始的曲线,达到降低时间、空间复杂度和平滑曲线的目的。 附赠自动驾驶学习资料和量产经验&…

【与C++的邂逅】---- 函数重载与引用

关注小庄 顿顿解馋(▿) 喜欢的小伙伴可以多多支持小庄的文章哦 📒 数据结构 📒 C 引言 : 上一篇博客我们了解了C入门语法的一部分,今天我们来了解函数重载,引用的技术,请放心食用 ~ 文章目录 一. 🏠 函数重…

windows搭建ftp实现局域网共享文件

一、开启ftp服务 1.使用 win Q 键,快捷打开搜索框 2.搜索框内搜索 “控制面板” 3. 进入控制面板内选择 ”程序“ 4. 单击进入 “启用或关闭windows功能” 5. 找到并展开“internet information services”、 6. 建议展开后全选 “FTP服务器” 和 “web管理工…

OpenHarmony实战:轻量系统芯片移植

本文从芯片适配的端到端视角,为芯片/模组制造商提供基于OpenHarmony的芯片适配指导。典型的芯片架构,例如cortex-m、risc-v系列都可以按照本文档进行适配移植。 约束与限制 本文档适用于OpenHarmony LTS 3.0.1及之前版本的轻量系统的适配。 说明&#…

Redis中的复制功能(三)

复制 服务器运行ID 除了复制偏移量和复制积压缓冲区之外,实现部分重同步还需要用到服务器运行ID(run ID): 1.每隔Redis服务器,不论主服务器还是从服务,都会有自己的运行ID2.运行ID在服务器启动时自动生成,由40个随机的十六进制…

ndk ffmpeg

报错: 解决办法: 报错 解决办法:

大模型量化技术-GPTQ

大模型量化技术-GPTQ 2022年,Frantar等人发表了论文 GPTQ:Accurate Post-Training Quantization for Generative Pre-trained Transformers。 这篇论文详细介绍了一种训练后量化算法,适用于所有通用的预训练 Transformer模型,同时只有微小的性能下降。 GPTQ算法需要通过…

vscode安装通义灵码

作为vscode的插件,直接使用 通义灵码-灵动指间,快码加编,你的智能编码助手 通义灵码,是一款基于通义大模型的智能编码辅助工具,提供行级/函数级实时续写、自然语言生成代码、单元测试生成、代码注释生成、代码解释、研…

性能测试?

一、什么是性能测试 先看下百度百科对它的定义 性能测试是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。我们可以认为性能测试是:通过在测试环境下对系统或构件的性能进行探测,用以验证在生产环境下系统性…

苹果手表Apple Watch录了两个半小时的录音,却只能播放4秒,同步到手机也一样,还能修复好吗?

好多人遇到这个情况,用苹果手表Apple Watch录音,有的录1个多小时,有的录了3、4小时,甚至更长时间,因为手表没电,忘记保存等原因造成录音损坏,都是只能播放4秒,同步到手机也一样&…

Java8 Stream API全面解析——高效流式编程的秘诀

文章目录 什么是 Stream Api?快速入门流的操作创建流中间操作filter 过滤map 数据转换flatMap 合并流distinct 去重sorted 排序limit 限流skip 跳过peek 操作 终结操作forEach 遍历forEachOrdered 有序遍历count 统计数量min 最小值max 最大值reduce 聚合collect 收集anyMatch…

git源码泄露

Git 源码泄露 开发人员会使用 git 进行版本控制,对站点自动部署。但如果配置不当,可能会将 .git 文件夹直接部署到线上环境,这就引起了 git 泄露漏洞,我们可以利用这个漏洞直接获得网页源码。 确定是否存在泄漏 (1&…

java项目基于Springboot和Vue的高校心理教育辅导系统的设计与实现

今天要和大家聊的是基于Springboot和Vue的高校心理教育辅导系统的设计与实现 !!! 有需要的小伙伴可以通过文章末尾名片咨询我哦!!! 💕💕作者:李同学 💕&…

大模型之路3:趟到了Llama-Factory,大神们请指点

各种AI工具和框架层出不穷,为开发者和研究者提供了前所未有的便利。当然了,也有困扰。尤其是对于动手能力越来越弱的中年油腻老程序员来说,更是难上加难。据说,嗯,据师弟说,说LlamaFactory凭借其独特的功能…

实验:基于Red Hat Enterprise Linux系统的创建磁盘和磁盘分区(一)

目录 一. 实验目的 二. 实验内容 三. 实验设计描述及实验结果 fdisk [参数] [设备] 1. 为虚拟机添加1块大小为3-5G的硬盘nvme,将该硬盘划分1个主分区和两个逻辑分区分别为600MB。 partprobe [选项] [设备] 2. 将主分区格式化为ext4文件系统并挂载到/自己名字命名…

Screeps Arena 游戏基础教程

一. 游戏内教程汉化1. 循环和导入(Loop and Import)2. 简单移动(Simple move)3. 首次攻击(First Attack)4. 爬虫的身体部分(Creeps Bodies)5. 存储和转移 (Store and Tra…

合并两个单链表

归纳编程学习的感悟, 记录奋斗路上的点滴, 希望能帮到一样刻苦的你! 如有不足欢迎指正! 共同学习交流! 🌎欢迎各位→点赞 👍 收藏⭐ 留言​📝 但行前路,不负韶华&#…