JavaSE (Java基础):面向对象(上)
8 面向对象
面向对象编程的本质就是:以类的方法组织代码,以对象的组织(封装)数据。
8.1 方法的回顾
package com.oop.demo01;// Demo01 类
public class Demo01 {// main方法public static void main(String[] args) {int c = 10;int d = 90;System.out.println(max(c,d));sayHello();}/*修饰符 返回值类型   方法名(...){// 方法体return 放回值;}*/// return 结束方法,返回一个结果!public static String  sayHello(){return "Hello,world";}public static int max(int a,int b){return a>b ? a : b; // 三元运算符;}}如果没有返回值在方法中的话,结果就会如下这段代码所示:
package com.oop.demo01;// 值传递
public class Demo04 {public static void main(String[] args) {int a = 1;// a 的值始终没有改变过都还是1System.out.println(a); // 1change(a);System.out.println(a); // 1}// 返回值为空public static void change(int a){a = 10;}
}
8.2 类与对象的创建、基础使用
关于类的创建就是直接在IDEA中的文件下直接创建类,就是点Java的文件,进行编译以后就是点class的文件。创造对象就是:对象类型 对象名 = 对象值。
我是这样理解的:
类就可以看做一个做蛋糕的模具,而对象就是按照这个模具所做出来的一个个蛋糕,蛋糕可以外表一样,但是名字可以不一样。比如都是用Student这个类来创建对象。却可以有:
Student S1 = new Student();
Student S2 = new Student();
Student S3 = new Student();........................等等
package com.oop.demo01;public class Demo02 {// 静态方法// 非静态方法public static void main(String[] args) {//实例化这个类// 对象类型  对象名 = 对象值Student student = new Student();student.say();}// 有static就是和类一起加载的public static void a(){//c();  -->这里的方法如果调用的话会直接报错。/*因为被static修饰过的方法是和类一起加载的,而他所调用的这个方法没有被static修饰,所以在实例化之后才存在。*/}// 类实例化之后才存在public void c(){}
}
可以在类里面再创建一个类,并且在里面的类里调用其他的类,如下面这段代码:
package com.oop.demo01;// 引用传递:对象,本质还是值传递
public class Demo05 {public static void main(String[] args) {Perosn perosn = new Perosn();System.out.println(perosn.name); // nullchange(perosn); // 调用了方法changeSystem.out.println(perosn.name); // 周某}public static void change(Perosn perosn){// perosn是一个类:指向的---> Perosn perosn = new Perosn();这是一个具体的人,可以改变属性perosn.name = "周某";}
}//定义了一个Perosn类,有一个属性:name
class Perosn{String name; //这里定义了一个name属性,返回值为默认的null
}8.3 构造器
关于构造器:一个类即使什么都不行都会存在一个方法,这个方法是一个没有参数的方法,
当我们创建对象时所使用的new关键字本质上是在调用我们的构造器。
需要注意的是:我们可以定义有参数的构造器,如果定义了他,就需要再一次定义本身已经存在的无参构造器。
package com.oop.demo02;// java ---> class
public class Person {// 一个类及时什么都不写它也会存在一个方法// 显示的定义构造器String name;// 实例化初始值//1. 使用new关键字,本质是在调用构造器//2. 用来初始化值// 无参的构造器public Person(){this.name = "周某";}// 有参构造:一旦定义了有参构造,无参就必须显示定义public Person(String name){this.name = name;}
}
/*
在可执行的类中的代码:
public class AppLication {public static void main(String[] args) {//new 实例化了一个对象Person person = new Person("周鹭巡");System.out.println(person.name); // 周某}
}构造器:1. 和类名相同2.没有返回值作用:1. new 本质在调用构造方法2. 初始化对象的值注意点:定义有参构造之后,如果想使用无参构造,显示定义一个无参的构造*/8.4 封装
关于封装就是在类里面定义属性的时候使用修饰符private,在这个类里面可以定义一些可以操作这个属性的方法,这些方法需要特定的名称。
get元素名 :获得这个元素的值
set元素名 :设置这个元素的值
package com.oop.demo04;public class Student {// 属性私有private String name;private int id;private String sex;private int age;// 提供一些可以操作这个属性的方法!// 提供一些public的get、set方法!// get 获得这个数据public String getName(){return this.name;}// set 给这个数据设置值public void setName(String name){this.name = name;}public int getId(){return this.id;}public void setId(int id){this.id = id;}public String getSex() {return sex;}public void setSex(String sex) {this.sex = sex;}public int getAge() {return age;}public void setAge(int age) {if (age < 120 && age > 0){this.age = age;} else{this.age = 20;}}
}/*
在可执行类中的代码:public static void main(String[] args) {Student S1 = new Student();S1.setName("周鹭巡");S1.setAge(999);S1.setId(35);S1.setSex("男");System.out.println(S1.getSex());System.out.println(S1.getId());System.out.println(S1.getName());System.out.println(S1.getAge());}封装:1.  提高了程序的安全性,保护数据2.  隐藏代码的实现细节3.  统一接口4.  系统可维护增加了*/8.5 继承、Super
继承就是直接在类名后面跟上关键词extends与父类的名字,子类可以继承父类的所有方法。
Super就是在子类中调用父类中的属性或者父类中的方法。
直接在子类的构造器的代码第一行使用代码super();,就是调用父类的构造器。
Person父类:
  
package com.oop.demo05;// 在Java中,所有的类,都默认直接或者间接继承Object
// Person 人:父类
public class Person /*extends Object*/ {public Person() {System.out.println("Person无参执行了");}private int money = 10_0000_0000;public void say(){System.out.println("说什么呢?");}public int getMoney() {return money;}public void setMoney(int money) {this.money = money;}protected String name = "zhoumou";// 私有的东西无法被继承public void print(){System.out.println("Person");}
}
Student子类:
package com.oop.demo05;// 学生 is 人: 派生类,子类
// 子类继承了父类,就会拥有父类的全部方法!
public class Student extends Person {// Ctrl + Hpublic Student() {// 隐藏代码:调用了父类的无参构造super();//调用父类的构造器,必须在子类构造器的第一行System.out.println("Student无参构造执行了");}public void print(){System.out.println("Student");}public void test1(){print();this.print();super.print();}private String name = "zlx";public void test(String name){System.out.println(name);System.out.println(this.name);System.out.println(super.name);}
}
8.6 方法的重写
我是这么理解的,当创建对象时,类型为这个对象所属的父类时,他所调用的父类引用的方法是指向的子类,就好像儿子不听爸爸话了。
其实方法的重写就是调用方法是,方法的修饰符静态与非静态的区别。
你给别人弄成了静态的话,那么调用时遵循的就是创建对象时左边的数据类型了。
如果是非静态的话,子类就不听父类话了,就都是向子类的方法看齐,你是调用到的父类的方法,但是引用到的确实子类的方法。
可执行类:
public class AppLication{public static void main(String[] args) {//静态的方法与非静态的方法区别很大// 方法的调用只和左边的数据类型有关A a = new A();a.test();// 父类的引用指向了子类B b = new A();b.test();}
}A类:
package com.oop.demo05;public class A extends B {@Override // 注解:有功能的注释!public void test() {System.out.println("A=>test()");}
}
B类:
package com.oop.demo05;// 重写都是方法的重写与属性无关
public class B {public void test(){System.out.println("B=>test()");}
}
执行后的结果就是:

相关文章:
 
JavaSE (Java基础):面向对象(上)
8 面向对象 面向对象编程的本质就是:以类的方法组织代码,以对象的组织(封装)数据。 8.1 方法的回顾 package com.oop.demo01;// Demo01 类 public class Demo01 {// main方法public static void main(String[] args) {int c 10…...
 
flink使用StatementSet降低资源浪费
背景 项目中有很多ods层(mysql 通过cannal)kafka,需要对这些ods kakfa做一些etl操作后写入下一层的kafka(dwd层)。 一开始采用的是executeSql方式来执行每个ods→dwd层操作,即类似: def main(…...
 
FineDataLink4.1.9支持Kettle调用
FDL更新至4.1.9后,新增kettle调用功能,支持不增加额外负担的情况下,将现有的Kettle任务平滑迁移到FineDataLink。 一、更新版本前存在的问题与痛点 在此次功能更新前,用户可能会遇到以下问题: 1.对于仅使用kettle的…...
 
SwanLinkOS首批实现与HarmonyOS NEXT互联互通,软通动力子公司鸿湖万联助力鸿蒙生态统一互联
在刚刚落下帷幕的华为开发者大会2024上,伴随全场景智能操作系统HarmonyOS Next的盛大发布,作为基于OpenHarmony的同根同源系统生态,软通动力子公司鸿湖万联全域智能操作系统SwanLinkOS首批实现与HarmonyOS NEXT互联互通,率先攻克基…...
 
Win11禁止右键菜单折叠的方法
背景 在使用windows11的时候,会发现默认情况下,右键菜单折叠了。以至于在使用一些软件的右键菜单时总是要点击“显示更多选项”菜单展开所有菜单,然后再点击。而且每次在显示菜单时先是全部展示,再隐藏一下,看着着实难…...
 
Maven列出所有的依赖树
在 IntelliJ IDEA 中,你可以使用 Maven 插件来列出项目的依赖树。Maven 插件提供了一个名为dependency:tree的目标,可以帮助你获取项目的依赖树详细信息。 要列出项目的依赖树,可以执行以下步骤: 打开 IntelliJ IDEA,…...
测试开发面试题和答案
Python 请解释Python中的列表推导式(List Comprehension)是什么,并给出一个示例。 答案: 列表推导式是Python中一种简洁的构建列表的方法。它允许从一个已存在的列表创建新列表,同时应用一个表达式来修改或选择元素。…...
 
llm学习-3(向量数据库的使用)
1:数据读取和加载 接着上面的常规操作 加载环境变量---》获取所有路径---》加载文档---》切分文档 代码如下: import os from dotenv import load_dotenv, find_dotenvload_dotenv(find_dotenv()) # 获取folder_path下所有文件路径,储存在…...
 
【01-02】Mybatis的配置文件与基于XML的使用
1、引入日志 在这里我们引入SLF4J的日志门面,使用logback的具体日志实现;引入相关依赖: <!--日志的依赖--><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-api</artifactId><version&g…...
Linux-进程间通信(IPC)
进程间通信(IPC)介绍 进程间通信(IPC,InterProcess Communication)是指在不同的进程之间传播或交换信息。IPC 的方式包括管道(无名管道和命名管道)、消息队列、信号量、共享内存、Socket、Stre…...
C++ STL: std::vector与std::array的深入对比
什么是 std::vector 和 std::array 首先,让我们简要介绍一下这两种容器: • std::vector:一个动态数组,可以根据需要动态调整其大小。 • std::array:一个固定大小的数组,其大小在编译时确定。 虽然…...
 
哈哈看到这条消息感觉就像是打开了窗户
在这个信息爆炸的时代,每一条动态可能成为我们情绪的小小触发器。今天,当我无意间滑过那条由杜海涛亲自发布的“自曝式”消息时,不禁心头一颤——如果这是我的另一半,哎呀,那画面,简直比烧烤摊还要“热辣”…...
 
10、matlab中字符、数字、矩阵、字符串和元胞合并为字符串并将字符串以不同格式写入读出excel
1、前言 在 MATLAB 中,可以使用不同的数据类型(字符、数字、矩阵、字符串和元胞)合并为字符串,然后将字符串以不同格式写入 Excel 文件。 以下是一个示例代码,展示如何将不同数据类型合并为字符串,并以不…...
如何正确面对GPT-5技术突破
随着人工智能技术的快速发展,预训练语言模型在自然语言处理领域取得了显著的成果。其中,GPT系列模型作为代表之一,受到了广泛关注。2023年,GPT-5模型的发布引起了业界的热烈讨论。本文将从以下几个方面分析GPT-5的发布及其对人工智…...
 
HarmonyOS ArkUi 官网踩坑:单独隐藏导航条无效
环境: 手机:Mate 60 Next版本: NEXT.0.0.26 导航条介绍 导航条官网设计指南 setSpecificSystemBarEnabled 设置实际效果: navigationIndicator:隐藏导航条无效status:会把导航条和状态栏都隐藏 官方…...
解决跨域问题(vite、axios/koa)
两种方法选其一即可 一、后端koa设置中间件 app.use(async (ctx, next)> {ctx.set(Access-Control-Allow-Origin, *);ctx.set(Access-Control-Allow-Headers, Content-Type, Content-Length, Authorization, Accept, X-Requested-With , yourHeaderFeild);ctx.set(Access-C…...
 
echarts实现3D柱状图(视觉层面)
一、第一种效果 效果图 使用步骤 完整实例,copy就可直接使用 <template><div :class"className" :style"{height:height,width:width}" /> </template><script>import echarts from echartsrequire(echarts/theme/…...
 
K8S集群进行分布式负载测试
使用K8S集群执行分布式负载测试 本教程介绍如何使用Kubernetes部署分布式负载测试框架,该框架使用分布式部署的locust 产生压测流量,对一个部署到 K8S集群的 Web 应用执行负载测试,该 Web 应用公开了 REST 格式的端点,以响应传入…...
 
20.《C语言》——【移位操作符】
🌹开场语 亲爱的读者,大家好!我是一名正在学习编程的高校生。在这个博客里,我将和大家一起探讨编程技巧、分享实用工具,并交流学习心得。希望通过我的博客,你能学到有用的知识,提高自己的技能&a…...
 
你想活出怎样的人生?
hi~好久不见,距离上次发文隔了有段时间了,这段时间,我是裸辞去感受了一下前端市场的水深火热,那么这次咱们不聊技术,就说一说最近这段时间的经历和一些感触吧。 先说一下自己的个人情况,目前做前端四年&am…...
 
超短脉冲激光自聚焦效应
前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应,这是一种非线性光学现象,主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场,对材料产生非线性响应,可能…...
利用ngx_stream_return_module构建简易 TCP/UDP 响应网关
一、模块概述 ngx_stream_return_module 提供了一个极简的指令: return <value>;在收到客户端连接后,立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量(如 $time_iso8601、$remote_addr 等)&a…...
 
屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!
5月28日,中天合创屋面分布式光伏发电项目顺利并网发电,该项目位于内蒙古自治区鄂尔多斯市乌审旗,项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站,总装机容量为9.96MWp。 项目投运后,每年可节约标煤3670…...
 
SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现
摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序,以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务,提供稳定高效的数据处理与业务逻辑支持;利用 uniapp 实现跨平台前…...
【C语言练习】080. 使用C语言实现简单的数据库操作
080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...
 
12.找到字符串中所有字母异位词
🧠 题目解析 题目描述: 给定两个字符串 s 和 p,找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义: 若两个字符串包含的字符种类和出现次数完全相同,顺序无所谓,则互为…...
 
Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)
目录 一、👋🏻前言 二、😈sinx波动的基本原理 三、😈波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、🌊波动优化…...
 
人工智能(大型语言模型 LLMs)对不同学科的影响以及由此产生的新学习方式
今天是关于AI如何在教学中增强学生的学习体验,我把重要信息标红了。人文学科的价值被低估了 ⬇️ 转型与必要性 人工智能正在深刻地改变教育,这并非炒作,而是已经发生的巨大变革。教育机构和教育者不能忽视它,试图简单地禁止学生使…...
 
Windows安装Miniconda
一、下载 https://www.anaconda.com/download/success 二、安装 三、配置镜像源 Anaconda/Miniconda pip 配置清华镜像源_anaconda配置清华源-CSDN博客 四、常用操作命令 Anaconda/Miniconda 基本操作命令_miniconda创建环境命令-CSDN博客...
 
iview框架主题色的应用
1.下载 less要使用3.0.0以下的版本 npm install less2.7.3 npm install less-loader4.0.52./src/config/theme.js文件 module.exports {yellow: {theme-color: #FDCE04},blue: {theme-color: #547CE7} }在sass中使用theme配置的颜色主题,无需引入,直接可…...
