类、对象与接口

news2024/12/27 15:01:35

前言

类、对象与接口

文章目录

  • 前言
  • 一、类与对象
  • 二、源文件声明的规则
  • 三、修饰符
  • 四、继承
  • 五、多态
  • 六、接口
    • 1、定义
    • 2、接口
    • 3、实现
    • 4、接口

一、类与对象

类:定义一种全新的数据类型,包含一组变量(数据)和函数(逻辑),即将变量、数组、函数打包在一起。
对象/实例:类里的每一个实例/对象。

生活中的例子:例如在一间教室中,可以将Student定义成类,表示“学生”这个抽象的概念。那么每个同学就是Student类的一个对象/实例。
代码例子:String str1, str2, str3; 其中String为类,str1, str2, str3为对象/实例。

二、源文件声明的规则

一个源文件中只能有一个public类。
一个源文件可以有多个非public类。
源文件的名称应该和public类的类名保持一致。
每个源文件中,先写package语句,再写import语句,最后定义类,其中包的概念即当前文件所在的路径。

三、修饰符

一个类中的变量或者函数称其为成员变量和成员函数。
修饰符一般用来修饰类中的变量或者函数,访问指的是访问类中的变量或者函数。

  • private:只有本类内部可以访问,主要为了防止类外对其修改,代码协作,不希望类外对其进行修改。
  • public:类外可以访问。
  • protected:同一包或者子类可以访问。
  • default:同一个包内可以访问。
  • static
    • 修饰变量:静态变量,当前类的所有实例共享(例如一个教室中的黑板),普通变量为每个实例所共有的(例如一个教师中每个学生的草稿纸)。静态变量的访问通过类名来访问
      在这里插入图片描述
    • 修饰函数:静态函数只能访问静态函数(共享的只能访问共享的),普通的函数可以访问普通的函数也可以访问静态函数

构造函数:初始化对象时可以传一些参数。
封装:变量修饰为private,外面如果想访问这个变量时,有两种情况,一种是通过set函数赋值,另一种是取值通过get函数。

class Point {
	private int x;
	private int y;

	public Point(int x, int y) {
		this.x = x;
		this.y = y;
	}

	public void setX(int x) {
		this.x = x;
	}

	public void setY(int y) {
		this.y = y;
	}

	public int getX() {
		return x;
	}

	public int getY() {
		return y;
	}

	public String toString() {
		return String.format("(%d, %d)", x, y);  // 将当前点转换成字符串
	}
}

四、继承

为了减少代码量,将公共的概念变成一个基类,每一个角色从这个基类中继承过来,每一个角色会将基类中的成员函数和成员变量继承过来。
例如,想在当前类的基础之上加上一个新的参数,代码如下。

class ColorPoint extends Point {
    private String color;

    public ColorPoint(int x, int y, String color) {
        super(x, y);  // 调用父类的构造函数,将父类中的x和y赋成当前的x和y
        this.color = color;
    }

    public void setColor(String color) {
        this.color = color;
    }

    public String toString() {  // 子类和父类中有同名的函数时会优先使用子类的
        return String.format("(%d, %d, %s)", super.getX(), super.getY(), this.color);
    }
}

五、多态

父类引用可以指向子类对象,Point2虽然是父类类型,但是对象是子类对象,Point和Point2是同一种类型的对象,调用同一个toString函数时结果不一样,第一个调用父类的toString方法,第二个调用子类的toString方法。

在这里插入图片描述
在这里插入图片描述
同一种类型的对象,调用同一个函数会有不同的行为
在这里插入图片描述
在这里插入图片描述



多态的作用:一个游戏中几百个英雄,初始时每个英雄都会说一句话,如果不用多态的话,需要调用每一个英雄的greet方法,需要写好多if-else语句,很麻烦。
在这里插入图片描述

如果有多态的话,会将每一个英雄对象赋给它的基类,然后只需要一句代码就行。
在这里插入图片描述

每次调用greet函数时会看是哪个对象,然后调用自己对应的greet函数。

六、接口

主要用来定义一个类必须要包含哪些函数的一个工具

1、定义

interface Role {
    void greet();
    void move();
    int getSpeed();
}

2、接口

一个接口可以继承多个接口

interface Hero extends Role {
    public void attack();
}

3、实现

接口的实现:就是实现接口中定义的函数。一个类可以实现多个接口,每个接口间用 , 隔开。

class Zeus implements Hero {
    private final String name = "Zeus";
    public void attack() {
        System.out.println(name + ": Attack!");
    }

    public void greet() {
        System.out.println(name + ": Hi!");
    }

    public void move() {
        System.out.println(name + ": Move!");
    }

    public int getSpeed() {
        return 10;
    }
}

4、接口

一个对象是可以放到本类的变量上,也可以放到父类的变量上,也可以放到接口类型的变量上
多个类去实现同一个接口。

class Athena implements Hero {
    private final String name = "Athena";
    public void attack() {
        System.out.println(name + ": Attack!!!");
    }

    public void greet() {
        System.out.println(name + ": Hi!!!");
    }

    public void move() {
        System.out.println(name + ": Move!!!");
    }

    public int getSpeed() {
        return 10;
    }
}

public class Main {
    public static void main(String[] args) {
        Hero[] heros = {new Zeus(), new Athena()};  // 将类定义成接口类型
        for (Hero hero: heros) {  // 第一个调用宙斯的,第二个调用雅典娜的
            hero.greet();
        }
    }
}

在这里插入图片描述

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

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

相关文章

【django】各种关联关系的模型类设计

文章目录前言一、级联操作二、一对多(多对一)的关联模型类设计1、学生表模型类设计2、渠道表模型类设计三、多对多的关联模型类设计1、课程表模型类设计四、多对多的关联模型类设计(自定义中间表)1、模型类设计课程表模型类设计报…

神经网络的学习率如何选择?

文章目录学习率的概念学习率的选择方法参考资料学习率的概念 这里的学习率指的是深度学习神经网络训练过程中选取的一个超参数。 学习率作为参数更新时的一个乘数项,可以影响网络训练的速度,或者说是每次迈步的大小。 可以这样理解,如果学…

ZC706P+ADRV9009连接RADIOVERSE详解之二

上一个BLOG我们在WIN上安装了RADIOVERSE软件以及做好了SD卡映像。这篇文字我们记录ZC706ADRV9009硬件链接情况: 这里看到USB UART串口是可选的,主要是用来查看启动的系统log。 实际连接如下: 图中: 1,外接12V电源 2…

Python数据结构与算法篇(三)-- 队列的实现和应用

1 队列 1.1 简单队列 队列是一种有次序的数据集合,其特征是新数据项的添加总发生在一端(通常称为“尾rear”端);而现存数据项的移除总发生在另一端(通常称为“首front”端)。当一个元素被加入到队列之后&a…

头歌作业之排序1、2、3、4

(PS:直接拿的友友zy的) 一个不知名大学生,江湖人称菜狗 original author: jacky Li Email : 3435673055qq.com Time of completion:2023.1.1 Last edited: 2023.1.1 目录 (PS:直接拿的友友的&a…

SCI论文解读复现【NO.2】基于注意机制的YOLOv5改进算法在行星图像中的应用(代码已复现)

此前出了目标检测算法改进专栏,但是对于应用于什么场景,需要什么改进方法对应与自己的应用场景有效果,并且多少改进点能发什么水平的文章,为解决大家的困惑,此系列文章旨在给大家解读发表高水平学术期刊中的SCI论文&am…

EMNLP22提示模板生成:GPS: Genetic Prompt Search for Efficient Few-shot Learning

GPS: Genetic Prompt Search for Efficient Few-shot Learning 1 简介 Genetic Prompt Search (GPS) 通过提示改进少样本学习,它利用遗传算法自动搜索高性能提示 遗传提示搜索 (GPS) 算法,该算法使用生成模型逐渐改变提示,并根据它们在小型…

C语言网刷题记录

作者:会敲代码的Steve 座右铭:博学笃志,切问静思。 大家好久不见啊,一看时间我已经好久没发文章了,最近在刷OJ题和学习;就没那么多心思把时间花在写文章上了,我对此感到很抱歉,本文呢…

int8,FLOPS,FLOPs,TOPS 等具体含义

1、定义 算力的计量单位FLOPS(Floating-point operations per second),FLOPS表示每秒浮点的运算次数。具体使用时,FLOPS前面还会有一个字母常量,例如TFLOPS、PFLOPS。这个字母T、P代表次数,T代表每秒一万亿…

Linux学习笔记——MySQL数据库管理系统安装部署

5.1、MySQL数据库管理系统安装部署 5.1.1、简介 1、MySQL简介 MySQL数据库管理系统(后续简称MySQL),是一款知名的数据库系统,其特点是:轻量、简单、功能丰富。 MySQL数据库可谓是软件行业的明星产品,无…

xilinx ZYNQ 7000 AXI GPIO

.0AXI GPIO 第一部分 PS 和 PL之间的通讯有一个接口称为AXI。AXI总线具体的内容这边不去深究,可以理解为一种特殊协议的通讯方式。 AXI GPIO是什么意思? PL是FPGA它可以做成任何你想要的东西,做一个GPIO外设当然是可以的。 如上图所示&…

DoIP协议从入门到精通——通信建立

在DoIP专栏中,关于DoIP文章,主要讲述从车辆物理连接、车辆声明、车辆通信激活(Routine Activation)和诊断通信几个步骤。 本文介绍了Tester与车辆获取物理连接、车辆声明自身信息后接下来需要操作的就是本文所要分享的内容:Tester与车辆控制器的通信建立。 一、通信模式…

记一次堆外内存泄漏分析

文章目录1. 背景2. JVM 内存分布与分析2.1 JVM 内存分布2.2 堆外内存泄漏分析思路2.3 服务器 JVM 参数配置及实际内存分布2.4 JVM native 内存查看2.5 手动触发 Full GC3. 问题排查经历3.1 定位内存泄漏的位置及初步猜想1)定位 RES 区域存在内存泄漏2)分…

寒假每日一题W1D1——孤独的照片

题目描述 Farmer John 最近购入了 N 头新的奶牛,每头奶牛的品种是更赛牛(Guernsey)或荷斯坦牛(Holstein)之一。 奶牛目前排成一排,Farmer John 想要为每个连续不少于三头奶牛的序列拍摄一张照片。 然而&…

一本通 1267:【例9.11】01背包问题(详细代码)

经典01背包问题 这里给你3种方法 目录 DFS 思路: 代码: DFS记忆化 思路: 代码: 动态规划 思路: 代码: DFS 时间复杂度 :O(2^n) 思路: DFS求出所有选法,再用…

Maven 之 依赖管理

目录 1、依赖传递 小案例: 2、可选依赖 3、 排除依赖 4、可选依赖和排除依赖的区别 我们开发一个工程需要用到大量得jar包,而这些jar 包就是我们所说得依赖,一个项目可以配置多个依赖。 1、依赖传递 我们来看一下今天用来演示的工程。…

Linux性能学习(1.4):CPU_如何查看CPU上下文切换参数

文章目录1 系统总体上下文参数2 进程的上下文切换参数3 其它参考资料:vmstat:一个标准的报告虚拟内存统计工具 在前面大致了解了上下文切换的相关知识,那么如何在系统中查看上下文切换相关的参数? 1 系统总体上下文参数 使用vm…

人工势场法路径规划算法(APF)

本文主要对人工势场法路径规划算法进行介绍,主要涉及人工势场法的简介、引力和斥力模型及其推导过程、人工势场法的缺陷及改进思路、人工势场法的Python与MATLAB开源源码等方面 一、人工势场法简介 人工势场法是由Khatib于1985年在论文《Real-Time Obstacle Avoidan…

WPF使用触发器需要注意优先级问题

总目录 文章目录总目录前言一、问题开始二、问题说明三、问题订正总结前言 WPF使用触发器需要注意优先级问题 一、问题开始 现在有个需求: 初始状态(未选中)的时候,CheckBox的Content 为 “乒乓球”,然后选中之后&am…

python机器学习《基于逻辑回归的预测分类》

前言: 本文所有代码均在阿里天池实验室运行,本机的jupyter notebook也可运行。除此之外,还需要导入numpy,matplotlib,sklearn,seaborn包。每期文章前面都会有环境搭建说明。文中的讲解知识点均是按照从上往下讲解,将一些平常未接触…