Java项目总结3

news2024/10/7 13:23:07

1.抽象类与抽象方法

注意:

抽象类不能实例化

抽线类中不一定有抽i像方法,有抽象方法的类一定是抽象类

可以有构造方法

抽象类的子类要么重写抽象类中的所有抽象方法,要么是抽象类

抽象类的作用:

抽取共性时,无法确定方法体,就把方法定义为抽象的。

强制让子类按照某种格式重写。

抽象方法所在的类,必须是抽象类

抽象类和抽象方法的格式?

public abstract  返回值类型 方法名 (参数列表);

public abstract class 类名{}

抽象类在多态方面的继承:

// 抽象类和抽象方法需要被 abstract 关键字修饰
abstract class Shape {
    // 抽象类中的方法一般要求都是抽象方法,抽象方法没有方法体
    abstract void draw();
}
// 当一个普通类继承一个抽象类后,这个普通类必须重写抽象类中的方法
class Cycle extends Shape {
    @Override
    void draw() {  // 重写抽象类中的draw方法
        System.out.println("画一个圆圈");
    }
}
 
public class Test4 {
    public static void main(String[] args) {
        //Shape shape = new Shape();  抽象类虽然不能直接实例化
        // 但可以把一个普通类对象传给一个抽象类的引用呀,即父类引用指向子类对象
        Shape shape = new Cycle(); // 这称作:向上转型
        
        /*Cycle cycle = new Cycle();
          Shape shape = cycle // 这是向上转型的另一种写法
         */
        shape.draw();         // 通过父类引用调用被子类重写的方法
    }
}

2.接口

接口:就是一种规则

例:兔子不会游泳,而青蛙和狗类会,则不能放在父类里,则需要创建一个具有游泳功能的接口。

接口设计规则:

  1. 抽取派生类的共同属性和行为抽到超类中,
  2. 抽象类:如果子类方法都一样设计为普通方法,如果子类的行为不是有一致的就写成抽象方法
  3. 接口:抽取部分子类相同行为,抽取到接口中——多继承,多实现,接口是对单继承的扩展

接口的定义与使用:

//接口定义的关键字interface
//接口都需要有实现类
public interface userService {
    //接口中的所有定义都是抽象的 public abstract
    void add(String name);
    void delete(String name);
    void update(String name);
    void query(String name);
}
public interface timeService {
    void timer();
}
//类可以实现接口 implements
//实现了接口的类,就需要重写接口中的方法
//利用接口实现多继承
public class userServiceImpl implements userService,timeService{
    @Override
    public void add(String name) {
 
    }
 
    @Override
    public void delete(String name) {
 
    }
 
    @Override
    public void update(String name) {
 
    }
 
    @Override
    public void query(String name) {
 
    }
 
    @Override
    public void timer() {
 
    }
}

接口的换代升级:

适用于添加接口新功能

3.内部类

内部类表示的事物是外部类的一部分,内部类单独出现没有任何意义。

内部类的访问特点:

1.内部类可以直接访问外部类的成员,包括私有

2.外部类要访问内部类的成员,必须创建对象

什么时候用到内部类?

例:需要录入车的信息,那么发动机的品牌,颜色,型号就可以当一个内部类

下图中Engine为内部类

内部类主要分为:静态内部类,非静态内部类。(static静态修饰)

注意:非静态内部类里不能有静态方法,静态成员变量,静态初始化块。

main获取内部类的对象:

1.Car.Engine r=new Car().new.Engine();直接创建(格式:外部类名.内部类名 对象名=外部类对象.内部类对象)

2.外部类编写方法,对外部类提供内部对象(private)

非静态外部类访问内部类

public class jtai {
    private String prop="外部变量";
    private class InClass {
        private String prop = "内部变量";

        public void print() {
            String prop = "局部变量";
            System.out.println("外面 " + jtai.this.prop);
            System.out.println("内部 " + this.prop);
            System.out.println("局部 " + prop);
        }
    }
public void test() {
    InClass obj=new InClass();
    obj.print();
}
    public static void main(String[] args) {
        new jtai().test();
    }
}

非静态内部类访问外部类

// 外部类
class OuterClass {
    private int outerField = 10;

    // 内部类
    class InnerClass {
        void accessOuter() {
            System.out.println("访问外部类的成员变量: outerField = " + outerField);
            System.out.println("调用外部类的方法:");
            outerMethod();
        }
    }

    // 外部类的方法
    void outerMethod() {
        System.out.println("这是外部类的方法");
    }

    // 外部类的入口方法
    public static void main(String[] args) {
        // 创建外部类的对象
        OuterClass outerObj = new OuterClass();
        // 创建内部类的对象
        OuterClass.InnerClass innerObj = outerObj.new InnerClass();
        // 调用内部类访问外部类的方法
        innerObj.accessOuter();
    }
}

静态内部类:只能访问外部类中的静态变量和静态方法,如果想要访问非静态的想要创建对象。

静态内部类访问外部类:

// 外部类
class OuterClass {
    private static int outerStaticField = 100;
    private int outerField = 10;

    // 静态内部类
    static class StaticInnerClass {
        void accessOuter() {
            // 访问外部类的静态成员变量
            System.out.println("访问外部类的静态成员变量: outerStaticField = " + OuterClass.outerStaticField);
            
            // 若要访问外部类的非静态成员变量,需要通过外部类的对象访问
            OuterClass outerObj = new OuterClass();
            System.out.println("访问外部类的非静态成员变量: outerField = " + outerObj.outerField);
            
            // 若要调用外部类的方法,也需要通过外部类的对象访问
            outerObj.outerMethod();
        }
    }

    // 外部类的方法
    void outerMethod() {
        System.out.println("这是外部类的方法");
    }

    // 外部类的入口方法
    public static void main(String[] args) {
        // 创建静态内部类的对象
        StaticInnerClass innerObj = new StaticInnerClass();
        // 调用内部类访问外部类的方法
        innerObj.accessOuter();
    }
}

外部类访问静态内部类

// 外部类
class OuterClass {
    private static int outerStaticField = 100;

    // 静态内部类
    static class StaticInnerClass {
        void innerMethod() {
            System.out.println("这是静态内部类的方法");
        }
    }

    // 外部类的方法
    void outerMethod() {
        System.out.println("这是外部类的方法");

        // 在外部类的方法中创建静态内部类的对象并调用其方法
        StaticInnerClass innerObj = new StaticInnerClass();
        innerObj.innerMethod();
    }

    // 外部类的入口方法
    public static void main(String[] args) {
        // 在外部类的静态方法中创建静态内部类的对象并调用其方法
        StaticInnerClass innerObj = new StaticInnerClass();
        innerObj.innerMethod();

        // 在外部类的静态方法中创建外部类的对象并调用其方法
        OuterClass outerObj = new OuterClass();
        outerObj.outerMethod();
    }
}

有没有发现一个现象即静态与非静态的相互访问都需要用到关键字new,因为静态会开辟空间,呢哇也是。

注意:使用静态内部类比使用非静态内部类简单很多,只要把外部类当成静态内部类的包空间即可。

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

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

相关文章

GraalVM

文章目录 1、什么是GraalVM2、GraalVM的两种模式1_JIT模式2_AOT模式3_总结 3、应用场景1_SpringBoot搭建GraalVM应用2_函数计算3_Serverless应用 4、参数优化和故障诊断1_内存快照文件的获取2_运行时数据的获取 1、什么是GraalVM GraalVM是Oracle官方推出的一款高性能JDK&…

AI与测试相辅相成

AI助力软件测试 1.AI赋能软件测试 使用AI工具来帮助测试人员提高测试效率,提供缺陷分析和缺陷预测。 语法格式 设定角色 具体指示 上下文格式 例: 角色:你是一个测试人员 内容:请帮我生成登录案例的测试用例 ​ 1.只有输入正确账号和密码才…

LLM笔记:训练大模型之并行化

1 数据并行 最常见的并行化手段主要是把数据分成多个块,然后每个节点就可以在本地独立的跑各自的数据任务,最后再和其他节点通信,进而汇总最后的结果好处就是计算效率高,每个节点可以独自计算自己的任务且这种方法易于实现缺点就…

Linux—KVM虚拟化中使用基本命令管理虚拟机(纯实例)

🏡作者主页:点击! 👨‍💻Linux高级管理专栏:点击! ⏰️创作时间:2024年7月2日11点11分 🀄️文章质量:94分 文章目录 前言 1.查看命令帮助 2.查看KVM 的…

PostgreSQL 在Windows下保姆级图文安装教程

😎 作者介绍:我是程序员洲洲,一个热爱写作的非著名程序员。CSDN全栈优质领域创作者、华为云博客社区云享专家、阿里云博客社区专家博主。 🤓 同时欢迎大家关注其他专栏,我将分享Web前后端开发、人工智能、机器学习、深…

Android zygote访谈录

戳蓝字“牛晓伟”关注我哦! 用心坚持输出易读、有趣、有深度、高质量、体系化的技术文章,技术文章也可以有温度。 本文摘要 本文以访谈的方式来带大家了解zygote进程,了解zygote进程是啥?它的作用是啥?它是如何一步…

关于一些数据资源入表事项

一、入表条件: 2024年1月1日《企业数据资源相关会计处理暂行规定》开始执行,以上简称《企业会计准则》,它将资产定义为“企业过去的交易或者事项形成的、由企业拥有或者控制的、预期会给企业带来经济利益的资源”。需要说明的是,…

3D问界—法线空间与应用举例

问题提出:什么是法线空间,有哪些应用的场景? 法线空间(Normal Space)在计算机图形学中是一个重要的概念,特别是在处理表面法线(Normal)时常被提及。 1. 法线空间的分类 法线空间是相…

nanodiffusion代码逐行理解之Attention

目录 一、注意力中的QKV二、注意力中的位置嵌入三、注意力中的多头四、注意力和自注意力五、注意力中的encode和decoder 一、注意力中的QKV 简单来说: Q: 要查询的信息 K: 一个索引,要查询的向量 V: 我们查询得到的值 复杂一点的解释: Query…

Hadoop的namenode启动不起来

1、 排查原因 Initialization failed for Block pool (Datanode Uuid a5d441af-d074-4758-a3ff-e1563b709267) service to node1/192.168.88.101:8020. Exiting. java.io.IOException: Incompatible clusterIDs in /data/dn: namenode clusterID CID-674c5515-3fe1-4a9c-881d…

Winform中使用HttpClient实现调用http的post接口并设置传参content-type为application/json示例

场景 Winform中怎样使用HttpClient调用http的get和post接口并将接口返回json数据解析为实体类: Winform中怎样使用HttpClient调用http的get和post接口并将接口返回json数据解析为实体类_winform解析json-CSDN博客 上面使用HttpClient调用post接口时使用的HttpCon…

一文搞懂MySsql的Buffer Pool

Buffer Pool是什么 Buffer Pool是MySQL数据库中一个非常关键的组件。数据库中的数据最终都是存放在磁盘文件上的。但是在对数据库执行增删改查操作时,不可能直接更新磁盘上的数据。因为如果直接对磁盘进行随机读写操作,那速度是相当的慢的。随便一个大磁…

技术驱动:探索SpringBoot的大文件上传策略

1.分片上传技术 为了处理大文件上传并保证性能,前后端可以使用分片上传(也称为分块上传)技术。 1.选择原因 分片上传(也称为分块上传)是一种处理大文件上传的技术,主要目的是提高上传的可靠性和效率。 网…

Canvas合集更更更之实现由画布中心向外随机不断发散的粒子效果

实现效果 1.支持颜色设置 2.支持粒子数量设置 3.支持粒子大小设置 写在最后🍒 源码,关注🍥苏苏的bug,🍡苏苏的github,🍪苏苏的码云

Python脚本:将Word文档转换为Excel文件

引言 在文档处理中,我们经常需要将Word文档中的内容转换成其他格式,如Excel,以便更好地进行数据分析和报告。针对这一需求,我编写了一个Python脚本,能够批量处理指定目录下的Word文档,将其内容结构化并转换…

从零开始使用WordPress搭建个人网站并一键发布公网详细教程

文章目录 前言1. 搭建网站:安装WordPress2. 搭建网站:创建WordPress数据库3. 搭建网站:安装相对URL插件4. 搭建网站:内网穿透发布网站4.1 命令行方式:4.2. 配置wordpress公网地址 5. 固定WordPress公网地址5.1. 固定地…

零知识学习之DPDK与RDMA(3)—— 认识DPDK(3)

接前一篇文章:零知识学习之DPDK与RDMA(2)—— 认识DPDK(2) 本文内容参考: 《Linux高性能网络详解 从DPDK、RDMA到XDP》 刘伟著 人民邮电出版社 https://blog.51cto.com/u_15301988/5181201 特此致谢&…

vite-ts-cesium项目集成mars3d修改相关的包和配置参考

如果vite技术栈下使用原生cesium,请参考下面文件的包和配置修改,想用原生创建的viewer结合我们mars3d的功能的话。 1. package.json文件 "dependencies": {"cesium": "^1.103.0","mars3d": "^3.7.18&quo…

2024微信小程序期末大作业-点奶茶微信小程序(后端nodejs-server)(附下载链接)_微信小程序期末大作业百度网盘下载

菜单展示 购物车展示&#xff1a; 提交订单&#xff1a; 支付详情页展示&#xff1a; 订单查看&#xff1a; 查看历史消费&#xff1a; 部分代码展示&#xff1a; <!--pages/home/home.wxml--> <block wx:for"{{listData}}" wx:key"itemlist&qu…

redis学习(002 安装redis和客户端)

黑马程序员Redis入门到实战教程&#xff0c;深度透析redis底层原理redis分布式锁企业解决方案黑马点评实战项目 总时长 42:48:00 共175P 此文章包含第5p-第p7的内容 文章目录 安装redis启动启动方式1&#xff1a;可执行文件启动启动方式2 基于配置文件启动修改redis配置文件 …