JAVA 面向对象编程
一. 类与对象
1.1 定义类 :类是由数据成员和成员方法组成的一个程序单元。数据成员表示类的属性,成员方法表示类的行为。
定义类的语法格式 :
class 类名{数据类型 数据成员名;...public 返回值类型 方法名(参数 2, 参数 2 ...){// 方法体[return 表达式;]}
}
Java 用 class 关键字标识类,类体中定义数据成员和成员方法。
class Person{// 定义数据成员,表示人的特征String IDNumber;String name;int age;public String getIDNumber() {return IDNumber;}public void setIDNumber(String IDNumber) {this.IDNumber = IDNumber;}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;}void eating(String food){System.out.println(name + "吃" + food);}void study(String book){System.out.println(name + "正在学习: " + book);}void watchTV(String program){System.out.println(name + "正在看: " + program);}void display(){System.out.println("姓名: " + name);}}
定义类分3个层次,第1层是类名,第2层是数据成员,第3层是成员方法。
1.2. 创建使用对象
语法格式 : 先声明后实例化对象
类名 对象名表; // 声明对象
对象名 = new 类名(); // 实例化对象
语法格式 : 声明和实例化对象同时完成
类名 对象名 = new 类名();
实例化对象后,该对象拥有自己的数据成员和成员方法,通过引用对象成员使用对象。
语法格式 : 引用数据成员
对象名.数据成员名
语法格式 : 引用成员方法
对象名.成员方法名(参数表)
Java数据类型分为基本数据类型和引用数据类型。类属于引用数据类型,引用数据类型指一段堆内存空间能同时被多个栈内存空间指向,对象名指的是保存在栈内存中用来访问其对应堆空间的访问地址。堆内存保存数据成员信息,因此能通过对象名引用堆内存。
1.3 构造方法
1.3.1 定义构造方法
class 类名{访问权限 类名(形参列表){// 方法体;// 构造方法没有返回值}
}
构造方法是类中特殊的成员方法,特殊性主要体现在
a) 构造方法名与类名相同
b) 不能为构造方法指定类型,也不能用return 语句返回值。但构造方法由隐含返回值,该值由系统内部使用
c) 可以重载构造方法
d) 编程人员不能显示的直接调用构造方法,每当new 关键字创建对象时,JVM为新建对象在堆内存开辟空间后,JVM将自动调用构造方法初始化新对象。
e) 如果自定义类中未定义构造方法,系统将提供要给默认的空构造方法。如果自定义类中定义了构造方法,系统将不再提供空构造方法
1.9 抽象类
1.9.1 抽象类概念 : 抽象类刻画公共行为特征,但并没有在抽象类内部实现这些公共行为,而是通过继承由派生类实现具体的公共行为。抽象类中定义的方法称为抽象方法,这些方法只有方法声明而没有方法具体定义,派生类覆写抽象方法,实现与该派生类相关的操作。
1.9.2 定义抽象类
用abstract 修饰的类称为抽象类,用 abstract 修饰的方法,且只有方法声明,没有方法体的方法称为抽象方法。
定义抽象类语法格式
abstract class 抽象类名{
//数据成员
//构造方法
[访问权限] 返回值类型 方法名(形参列表){
// 方法体
返回值
}
[访问权限] abstract 返回值类型 方法名(形参列表);
}
Java 程序对抽象类有如下要求 :
(1) 抽象类中可以有0个或者多个抽象方法,也可以包含非抽象方法。
(2) 抽象类中可以不定义抽象方法,但有抽象方法的类必须是抽象类。
(3) 抽象类可以派生子类。如果派生实体类,实体子类必须实现抽象类中定义的所有抽象方法;如果派生抽象子类,抽象子类可以不实现抽象父类的抽象方法。
// 抽象父类
abstract class Person{public void talk(){ }; // 普通方法abstract void workOn(); //抽象方法
}// 实体子类
class Teacher extends Person{void workOn(){System.out.println("教师授课");}
}// 抽象子类
abstract class Student extends Person{// 没有实现父类的抽象方法 workOn()abstract void study();
}
(4) 抽象类不能实例化对象,由抽象类派生的实体子类实例化抽象父类对象。
package abstract_test;abstract class Person{// 1.1 私有数据成员private String name;// 1.2 构造方法public Person(){ }public void setName(String name) {this.name = name;}public String getName() {return name;}public Person(String name){this.name = name;}public void eating(String food){System.out.println(this.name + "正在吃" + food);}abstract public void workOn();
}// 2. Person类的子类 Teacher
class Teacher extends Person{private String department;public Teacher() { }public Teacher(String name, String department){super(name); // 调用父类构造方法this.department = department;}public String getDepartment() {return department;}public void setDepartment(String department) {this.department = department;}public void workOn(){System.out.println(this.getName() + " is " + this.department + " workint");System.out.println(this.getName() + " teaching chinese");}
}// 3. Person 的子类 Studentclass Student extends Person{private int id;public Student() {}public Student(String name, int id){super(name);this.id = id;}public int getId() {return id;}public void workOn(){System.out.println("id:" + getId() + ", name:" + getName() + " studing");}
}public class abstract_demo {public static void main(String[] args) {Teacher th = new Teacher("kongzi", "Chinese");th.workOn();Student st = new Student("zilu", 10001);st.workOn();}
}
抽象类本身不能通过构造方法创建对象,但能通过实体子类调用抽象父类的构造方法。继承机制中,不管父类是普通类还是抽象类,实例化子类对象前必须先实例化父类对象。
相关文章:
JAVA 面向对象编程
一. 类与对象 1.1 定义类 :类是由数据成员和成员方法组成的一个程序单元。数据成员表示类的属性,成员方法表示类的行为。 定义类的语法格式 : class 类名{数据类型 数据成员名;...public 返回值类型 方法名(参数 2, 参数 2 ...){// 方法体[return 表达…...
第十六章 解读深度学习中Batch Size、Iterations和Epochs(工具)
训练网络之前有很多参数要设置,不了解各个参数的含义就没法合理地设置参数值,训练效果也会因此大受影响。本篇博客记录一下网络训练里的Batch Size、Iterations和Epochs怎么理解。 一、引言 首先要了解一下为什么会出现Batch Size这个概念。深度学习算…...
基于UI交互意图理解的异常检测方法
美团到店平台技术部/质量工程部与复旦大学周扬帆教授团队开展了科研合作,基于业务实际场景,自主研发了多模态UI交互意图识别模型以及配套的UI交互框架。 本文从大前端质量保障领域的痛点出发,介绍了UI交互意图识别的方法设计与实现。基于UI交…...
ArgoWorkflow教程(一)---DevOps 另一选择?云原生 CICD: ArgoWorkflow 初体验
来自:探索云原生 https://www.lixueduan.com 原文:https://www.lixueduan.com/posts/devops/argo-workflow/01-deploy-argo-workflows/ 本文主要记录了如何在 k8s 上快速部署云原生的工作流引擎 ArgoWorkflow。 ArgoWorkflow 是什么 Argo Workflows 是…...
数据结构与算法编程题24
中序遍历非递归算法 #define _CRT_SECURE_NO_WARNINGS#include <iostream> using namespace std;typedef char ElemType; #define ERROR 0 #define OK 1 #define Maxsize 100 #define STR_SIZE 1024typedef struct BiTNode {ElemType data;BiTNode* lchild, * rchild; }B…...
springsecurity6配置四
一、springsecurity自定义过滤url配置 package com.school.information.config;import lombok.Data; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component;import java.util.List;/*** 需要放行的…...
OpenCV简介及安装
前言 因为最近想做图像处理、人脸检测/识别之类的相关开发,所以就开始补OpenCV的相关知识,便开个专栏用于记录学习历程和在学习过程中遇到的一些值得注意的重点和坑。 学习过程基本上也是面向官方文档和Google。 简介 OpenCV(开源的计算机视觉库)是基于…...
Unity调用dll踩坑记
请用写一段代码,让unity无声无息的崩溃。 你说这怕是有点难哦,谁会这么不幸呢?不幸的是,我幸运的成为了那个不幸的人。 unity里面调用dll的方式是使用 DllImport ,比如有一个 Hello.dll,里面有一个 char* …...
Oracle 数据库基线安全加固操作
目录 账号管理、认证授权 ELK-Oracle-01-01-01 ELK-Oracle-01-01-02 ELK-Oracle-01-01-03 ELK-Oracle-01-01-04 ELK-Oracle-01-01-05 ELK-Oracle-01-01-06 ELK-Oracle-01-01-07 …...
安装最新版WebStorm来开发JavaScript应用程序
安装最新版WebStorm来开发JavaScript应用程序 Install the Latest Version of JetBrains WebStorm to Develop JavaScript Applications By JacksonML 2023-11-25 1. 系统要求 WebStorm是个跨平台集成开发环境(IDE)。按照JetBrains官网对WebStorm软件…...
python opencv 放射变换和图像缩放-实现图像平移旋转缩放
python opencv 放射变换和图像缩放-实现图像平移旋转缩放 我们实现这次实验主要用到cv2.resize和cv2.warpAffine cv2.warpAffine主要是传入一个图像矩阵,一个M矩阵,输出一个dst结果矩阵,计算公式如下: cv2.resize则主要使用fx&…...
安装Anaconda、PyTorch(GPU版)库与PyCharm】
【Python深度学习:安装Anaconda、PyTorch(GPU版)库与PyCharm】https://www.bilibili.com/video/BV1cD4y1H7Tk?vd_source0aeb782d0b9c2e6b0e0cdea3e2121ebadownload.pytorch.org/whl/torchaudio/更改Jupyter Notebook的默认路径,亲…...
关于pytorch以及相关包的安装教程
一.查看自己电脑的配置 首先查看自己电脑的cuda的版本,WinR,敲入cmd打开终端 输入nvidia-smi,查看自己电脑的显卡等配置 这里要说明一下关于这个CUDA,它具有向后兼容性,这意味着支持较低版本的 CUDA 的应用程序通常也可以在较高版本的 CUD…...
AnalyticDB for PostgreSQL 实时数据仓库上手指南
AnalyticDB for PostgreSQL 实时数据仓库上手指南 2019-04-016601 版权 本文涉及的产品 云原生数据仓库 ADB PostgreSQL,4核16G 50GB 1个月 推荐场景: 构建的企业专属Chatbot 立即试用 简介: AnalyticDB for PostgreSQL 提供企业级数…...
【数据结构】堆(C语言)
今天我们来学习堆,它也是二叉树的一种(我滴神树!) 目录 堆的介绍:堆的代码实现:堆的结构体创建:堆的初始化:堆的销毁:堆的push:堆的pop:判空 &am…...
使用 Raspberry Pi、Golang 和 HERE XYZ 制作实时地图
到目前为止,您可能已经看过我的一些与 Raspberry Pi 和位置数据相关的教程。我是这些小型物联网 (IoT) 设备的忠实粉丝,并编写了有关使用 Golang 进行 WLAN 定位 和 使用 Node.js 进行 GPS 定位的教程。 我想继续沿着 Golang 路线,做一个关于…...
贪吃蛇(c实现)(真的超级超级简单)
1.代码请看贪吃蛇c实现 王赫辰/c语言 - 码云 - 开源中国 (gitee.com) 2.本项目宗旨: 1.不引入复杂的库函数(其他博主的全是陌生库函数看不懂?看我就对了!◕‿◕) 2.不使用c语法 (都说了c实现,…...
linux 内存回收mglru算法代码注释2
mglru与原lru算法的兼容 旧的lru算法有active与inactive两代lru,可参考linux 内存回收代码注释(未实现多代lru版本)-CSDN博客 新的算法在引入4代lru的同时,还引入了tier的概念。 新旧算法的切换的实现在lru_gen_change_state&a…...
Exchange意外登录日志
最近在审计Exchange邮件系统的时候,发现大量用户半夜登录的日志。而且都是成功的,几乎没有失败的情况。其中Logon Type 8表示用户从网络登录。 Logon type 8: NetworkCleartext. A user logged on to this computer from the network. The user’s pas…...
NX二次开发UF_CURVE_ask_curve_turn_angle 函数介绍
文章作者:里海 来源网站:https://blog.csdn.net/WangPaiFeiXingYuan UF_CURVE_ask_curve_turn_angle Defined in: uf_curve.h int UF_CURVE_ask_curve_turn_angle(tag_t curve, double orientation [ 3 ] , double * angle ) overview 概述 Returns …...
告别Techpoint和Nextchip!实测国产XS9922A/B芯片在车载DVR上的完整替换流程
国产XS9922A/B芯片在车载DVR中的实战替换指南 最近两年,车载电子行业面临着一个共同的挑战:进口芯片供应不稳定导致项目延期风险陡增。作为一名长期从事车载DVR设计的硬件工程师,我亲历了从Techpoint TP9930到国产XS9922B的完整替换过程。这…...
从卡车仪表盘到CAN总线:手把手拆解SAE J1939协议的数据帧(附报文分析)
从卡车仪表盘到CAN总线:手把手拆解SAE J1939协议的数据帧(附报文分析) 当商用车的仪表盘突然亮起故障灯时,大多数司机只会看到表面的警示符号。但在这背后,整辆车正在通过CAN总线以每秒数千条消息的速度,用…...
离散选择模型中的‘极值’秘密:为什么Gumbel分布是Logit模型的基石?
离散选择模型中的‘极值’秘密:为什么Gumbel分布是Logit模型的基石? 在交通规划中选择公交还是地铁?在市场营销中预测消费者会购买A品牌还是B品牌?这些看似简单的二选一问题背后,都隐藏着一个强大的统计学工具——离散…...
跨平台开发体验:在WSL中流畅使用PyTorch 2.8深度学习镜像
跨平台开发体验:在WSL中流畅使用PyTorch 2.8深度学习镜像 1. 为什么选择WSLPyTorch? 对于Windows系统下的深度学习开发者来说,环境配置一直是个头疼的问题。原生Windows环境安装CUDA、配置PyTorch经常遇到各种兼容性问题,而虚拟…...
文件管理笔记
su 切换用户bash 执行命令shutdown -h立即关机 -r立即重启 -hxx xx分钟后自动关机文件目录操作命令cd 将当前目录切换到指定目录pwd 显示当前所处目录mkdir 创建目录tree 查看目录结构rm 直接删除目录或文件 -f 不做提示 -r 删除目录以及内文件 -v 显示删除详细过程文件操作…...
5分钟学会BabelDOC:PDF智能翻译工具终极指南
5分钟学会BabelDOC:PDF智能翻译工具终极指南 【免费下载链接】BabelDOC Yet Another Document Translator 项目地址: https://gitcode.com/GitHub_Trending/ba/BabelDOC 你是否曾经遇到过需要翻译PDF文档,却发现翻译后的格式完全错乱,…...
PyQt5-tools安装总失败?可能是你的Python版本和系统环境在‘打架’(附兼容性自查清单)
PyQt5-tools安装失败深度排查:环境兼容性全景解决方案 当你在终端看到那个刺眼的红色报错——"Could not find a version that satisfies the requirement pyqt5-tools"时,可能已经尝试了更换镜像源、添加信任主机参数等常规操作。但问题依旧存…...
Pointofix/Zoomit屏幕标注二选一?实测对比教你根据网课、会议、编程不同场景做选择
Pointofix与Zoomit深度评测:如何为网课、会议、编程场景选择最佳屏幕标注工具 当你在线上教学时画错重点被学生截图疯传,或是代码评审时因标注不清引发误解,是否想过问题可能出在工具选择上?两款看似相似的屏幕标注工具Pointofix和…...
运维工程师的浪漫:手把手教你用特殊字符在服务器上“画画”(从/etc/motd到Banner全攻略)
服务器上的艺术:用ASCII与Unicode打造个性化运维环境 1. 技术人的创意表达新维度 在大多数人眼中,服务器运维是冰冷命令行与枯燥配置的代名词。但当我们打开终端,登录系统时,那些跳动的字符其实可以成为展现个性的画布。从简单的A…...
第31篇:从API到应用——调用OpenAI等接口,开发你的AI小工具(操作教程)
文章目录前言环境准备分步操作第一步:安全地管理你的API密钥第二步:编写你的第一个API调用第三步:构建文章总结小工具第四步:增加实用功能——从文件读取和保存结果完整代码与使用踩坑提示总结前言 在AI浪潮里滚了几年࿰…...
