当前位置: 首页 > 编程日记 > 正文

面向对象(类的概念,属性,方法,属性的声明,面向对象编程思维

面向对象

1.1 是如何认识新事物的?

过往的事物中总结事物的特点(特征),并比对新事物,新事物进行归类。

1.2 (Class)的概念(A)

是对一组具有相同特征和行为的对象的抽象描述。

理解:

[1] 类包含两个要素:特性和行为 => 同一类事物具有相同的特征和行为。

[2] 类是一个群体性概念。例如:网红、明星、草根、宅男、萝莉、沙雕

[3] 类可以理解为现实生活中所说 “类型

为什么会有类的概念?

现实生活中为了更好的区分事物,把事物进行归类,进而更好的认识事物。

程序

程序中,引入类的概念,就是为了快速生成更多的具有相同特性和行为的事物

1.3 对象的概念(A)

对象是类的具体实现,表示一个独立的、唯一的个体。

理解

[1] 对象是通过类生成的。对象一定具备该类的特性和行为。

[2] 对象是个体类是群体。=> 对象是独立的、唯一的。=> 属于同一类型的对象也是相互独立的

1.4 和对象的区别(B)

是抽象的,是一个群体概念。对象是具体的,是一个独立个体。

一个独立的对象一定属于某个类。理解包含对象

1.5 属性和方法(A)

1.5.1 属性

或者对象具有的特征在程序中称为属性(property/attribute)

具体对象的属性拥有数据称为属性值。

属于同一类对象都具有相同的属性,但各个对象都拥有各自的属性值。这些属性值区分了不同的对象。

1.5.2 方法

或者对象的行为称为方法(Method)

在java

是具有相同属性和方法的对象的集合。

对象是用来描述客观事物的一个实体,由一组属性和方法构成。

是对象的类型。

1.6 定义类和对象(A)

开发者可以根据需要自定义类,语法

[修饰符] class 类名{

属性

方法

}

案例:定义一个类实例化对象

public class Student{

// 声明类的属性

String sid;

String name;

int age;

char gender;

// 声明方法

public void learn(String cName){

System.out.println(name+" learn "+cName);

}

}

public class Test01{

public static void main(String[] args){

// 通过Student类创建对象

/*

Student stu;

stu = new Student();

*/

// stuStudent的一个对象,也是Student的一个实例

// new 操作就是实例化过程

Student stu = new Student();

// 给属性赋值(.语法)

stu.name = "张三";

stu.sid = "001";

// 调用方法

stu.learn("java");

Student stu2 = new Student();

stu2.name = "李四";

stu2.sid = "001";

stu2.learn("c++");

}

}

1.6.1 局部变量和成员变量

局部变量:方法或者语句块声明的变量称为局部变量,语句块就是作用域。

局部变量在其所在的作用域有效,出了作用域就无效。

作用域可以嵌套,内部作用域可以访问外部作用域的变量。

public void learn(String cName){

// 方法中定义的局部变量

System.out.println(name+" learn "+cName);

// 语句块中定义局部变量

{

int count = 10;

System.out.println(" count "+count);

System.out.println("cname"+cName);

}

// System.out.println(" count "+count);

}

成员变量:方法外部,类的内部定义的变量称为类的成员变量,简称成员变量。有些地方把属性称为filed(字段)

成员变量必须通过类的实例/对象调用例如 stu.name ,有时成员变量也称为实例变量。

成员变量 == 属性 == 字段 == 实例变量

中包含两个成员:成员变量和成员方法。

1.6.2 属性的声明

[修饰符] 属性类型 属性名称  [=默认值]

在定义成员变量时可以对其初始化,如果不对其初始化,Java使用默认的值对其初始化。(数值:0,0.0   char:\u0000,  boolean:false,  所有引用类型:null)  

属性/成员变量的作用域范围是整个类体

1.7 对象的内存图(B)

1.8 面向对象编程思维(A)

面向对象编程(oop),把一切都看出对象,通过类构造对象,java程序都是通过class类组织的。

所谓面向对象通过类构造对象,使用对象完成需求。

需求:手机播放一首歌曲

public class Phone{

String brand;

String type;

float price;

public void showInfo(){

System.out.print("品牌:"+brand);

System.out.print(",型号:"+type);

System.out.println(",价格:"+price);

}

public void play(Music music){

System.out.println("正在用"+brand+type+"播放<<"+music.name+">>歌曲");

music.showInfo();

}

}

public class Music{

String name;

String actor;

int times;

String content;

public void showInfo(){

System.out.println("-- "+name+" --");

System.out.println("演唱者:"+actor);

int h = times / 3600;

int m = times % 3600 / 60;

int s = times % 60;

System.out.println("时长:"+h+":"+m+":"+s);

System.out.println(content);

}

}

public class Test01{

public static void main(String[] args){

Music music = new Music();

music.name = "向天再借五百年";

music.actor = "韩磊";

music.times = 356;

music.content = "沿着江山起起伏伏温柔的曲线,\n放马爱的中原爱的北国和江南";

Phone phone = new Phone();

phone.brand = "Apple";

phone.type = "iPhone XR";

phone.price = 5999.0f;

phone.play(music);

}

}

··

总结

面向对象编程就是完成一个复杂的需求需要各个对象之间相互配合完成。对象的创建需要定义类型,java程序就是通过类来组织程序的。

java中一切都是对象。

1.9 抽象(B)

1.9.1 抽象的概念

根据业务中的对象抽象成计算机识别的类简单的说就是抽出各个对象像的部分。

抽象的步骤

[1] 发现(归类)。类一般用名

[2] 发现类的属性(特征)。属性一般用名发现类的属性,一般只放和业务相关的属性。

[3] 发现类的方法(行为)。方法一般是动词。只放和业务相关的方法。

抽象一个下载类。

[1] DownLoad类

[2] url/name/size/progress/type/location…

[3] start()/pause()/stop()/delete()…

转载于:https://www.cnblogs.com/onePG/p/10738339.html

相关文章:

cannot find main module 解决办法

做6.824 实验的过程中想要跑测试&#xff0c;发现go test -run 2A时 出现cannot find main module问题&#xff0c;测试跑不起来。 原因 这个原因是从GO1.11 版本开始引入了go.mod文件来对项目中的go源码的编译相关的内容进行管理&#xff0c;经常使用GO的同学可能深受go get…

Java项目:网上选课系统(java+SSM+jsp+mysql+maven)

源码获取&#xff1a;博客首页 "资源" 里下载&#xff01; 一、项目简述 功能&#xff1a; 系统分为三个角色。最高权限管理员&#xff0c;学生&#xff0c;教师&#xff0c;包括 学生管理&#xff0c;教师管理&#xff0c;课程管理&#xff0c;选课&#xff0c;退课…

C#中类的继承 override virtual new的作用以及代码分析

继承中override virtual new的作用 virtual 父类中需要注明允许重写的方法&#xff1b; override 子类中必须显示声明该方法是重写的父类中的方法&#xff1b; new 子类中忽略父类的已存在的方法&#xff0c;“重写该方法“&#xff1b; C#中不支…

spring手动代码控制事务

为什么80%的码农都做不了架构师&#xff1f;>>> DataSourceTransactionManager tran new DataSourceTransactionManager(vjdbcTemplate.getDataSource());DefaultTransactionDefinition def new DefaultTransactionDefinition();//事务定义类def.setPropagationB…

tar命令-压缩,解压缩文件

tar&#xff1a; -c: 建立压缩档案 -x&#xff1a;解压 -t&#xff1a;查看内容 -r&#xff1a;向压缩归档文件末尾追加文件 -u&#xff1a;更新原压缩包中的文件 上面五个参数是独立的&#xff0c;压缩解压都要用到其中一个&#xff0c;可以和下面的命令连用但只能用其中一个。…

MIT 6.824 Lab2A (raft) -- Leader Election

文章目录实验要求Leader Election流程 及详细实现介绍基本角色关键超时变量关键的两个RPC实现RequestVote RPCAppendEntries RPCGo并发编程实现leader election调度本节记录的是完成MIT6.824 raft lab的leader Election部分实验。代码: https://github.com/BaronStack/MIT-6.82…

Java项目:在线考试系统(java+springboot+vue+jsp+mysql+maven)

源码获取&#xff1a;博客首页 "资源" 里下载&#xff01; 一、项目简述 本系统主要实现的功能有&#xff1a; 学生以及老师的注册登录&#xff0c;在线考试&#xff0c;错题查询&#xff0c;学生管理&#xff0c;问题管理&#xff0c;错题管理&#xff0c;错题查询…

写给自己的web开发资源

web开发给我的感觉就是乱七八糟&#xff0c;而且要学习感觉总是会有东西要学习&#xff0c;很乱很杂我也没空搞&#xff0c;&#xff08;其实学习这个的方法就是去用它&#xff0c;什么你直接用&#xff1f;学过js么学过jquery么&#xff1f;哈哈&#xff0c;我没有系统的看完过…

虚拟机VMWare“提示:软件虚拟化与此平台上的长模式不兼容”的解决方法

虚拟机VMWare“提示&#xff1a;软件虚拟化与此平台上的长模式不兼容”不少童鞋反映&#xff0c;在使用Windows7 64位操作系统时&#xff0c;无法运行VMWare或MS Virtual server等软件虚拟操作系统。提示为“提示&#xff1a;软件虚拟化与此平台上的长模式不兼容. 禁用长模式. …

如何在Vue项目中使用vw实现移动端适配(转)

有关于移动端的适配布局一直以来都是众说纷纭&#xff0c;对应的解决方案也是有很多种。在《使用Flexible实现手淘H5页面的终端适配》提出了Flexible的布局方案&#xff0c;随着viewport单位越来越受到众多浏览器的支持&#xff0c;因此在《再聊移动端页面的适配》一文中提出了…

Jsoncpp 在C++开发中的一些使用记录

jsoncpp 是一个C 语言实现的json库&#xff0c;非常方便得支持C得各种数据类型到json 以及 json到各种数据类型的转化。 一个json 类型的数据如下&#xff1a; {"code" : 10.01,"files" : "","msg" : "","uploadid&q…

Java项目:图书管理系统(java+SSM+jsp+mysql+maven)

源码获取&#xff1a;博客首页 "资源" 里下载&#xff01; 一、项目简述 功能包括(管理员和学生角色)&#xff1a; 管理员和学生登录&#xff0c;图书管理&#xff0c;图书添加删除修改&#xff0c;图书 借阅&#xff0c;图书归还&#xff0c;图书查看&#xff0c;学…

使用 Flash Builder 的 Apple iOS 开发过程

使用 Flash Builder 的 Apple iOS 开发过程 iOS 开发和部署过程概述 构建、调试或部署 iOS 应用程序前的准备工作 在测试、调试或安装 iOS 应用程序时选择的文件 将应用程序部署到 Apple App Store 时选择的文件 在使用 Flash Builder 开发 iOS 应用程序之前&#xff0c;必须…

grep之字符串搜索算法Boyer-Moore由浅入深(比KMP快3-5倍)

2019独角兽企业重金招聘Python工程师标准>>> 1. 简单介绍 在用于查找子字符串的算法当中&#xff0c;BM&#xff08;Boyer-Moore&#xff09;算法是目前被认为最高效的字符串搜索算法&#xff0c;它由Bob Boyer和J Strother Moore设计于1977年。 一般情况下&#xf…

多线程threading

threading用于提供线程相关的操作&#xff0c;线程是应用程序中工作的最小单元。python当前版本的多线程库没有实现优先级、线程组&#xff0c;线程也不能被停止、暂停、恢复、中断。 1. threading模块提供的类&#xff1a; Thread, Lock, Rlock, Condition, [Bounded]Sem…

一个简单的程序来使用WiredTiger 存储引擎

前言 WiredTiger 自 mongodb3.0 集成进来之后为mongodb拉回了大量的口碑&#xff0c;从而在mongodb-3.2 版本直接代替了in-memory存储引擎&#xff0c;作为了mongodb的默认存储引擎。其 通过支持Append-only btree lsm-tree 以及 针对磁盘/内存数据结构上的多核和无锁优化&am…

Java项目:网上商城系统(java+SSM+jsp+mysql+maven)

源码获取&#xff1a;博客首页 "资源" 里下载&#xff01; 一、项目简述功能 javaweb 网上商城系统&#xff0c;前台&#xff0b;后台管理&#xff0c;用户注册&#xff0c;登录&#xff0c;上哦展示&#xff0c;分组展示&#xff0c;搜索&#xff0c;收货地址管理&…

Linux 启动详解之init

1.init初探 init是Linux系统操作中不可缺少的程序之一。init进程&#xff0c;它是一个由内核启动的用户级进程&#xff0c;然后由它来启动后面的任务&#xff0c;包括多用户环境&#xff0c;网络等。 内核会在过去曾使用过init的几个地方查找它&#xff0c;它的正确位置&#x…

mysql 相关命令

mysqladmin versionmysqladmin statusmysqlshow -u帐号 -p密码 mysqlshow -u帐号 -p密码 库名mysql -u帐号 -p密码 -e SELECT Host,Db,User From db mysqlmysqldump --quick mysql | gzip > /root/mysql.gzmysqladmin create dbtestgunzip < /root/mysql.gz | mysql…

maven 添加数据库驱动

1.电脑上需要安装 apache maven2.下载oracle的jar包 例如我下载的是ojdbc7-12.jar3.cmd执行命令 mvn install:install-file -DgroupIdcom.oracle -DartifactIdojdbc7 -Dversion12 -Dpackagingjar -Dfiled:\jar\ojdbc7-12.jar-Dfile jar包所存放的位置4.pom文件添加&#xff1…

Rocksdb 的 BlobDB key-value 分离存储插件

前言 还是回到传统的 LSM-tree 中&#xff0c;我们key-value 写入时以append形态存放到一个data-block中&#xff0c;多个data-blockmetablock 之类的数据组织成一个sst。当我们读数据以及compaction的时候读到key 之后则很方便得读取到对应的value&#xff0c;一次I/O能够将k…

Java项目:(前端vue后台java微服务)在线考试系统(java+vue+springboot+mysql+maven)

源码获取&#xff1a;博客首页 "资源" 里下载&#xff01; 考试流程&#xff1a; 用户前台注册成为学生 管理员后台添加老师&#xff0c;系统将该用户角色上升为老师 老师登录&#xff0c;添加考试,添加题目&#xff0c;发布考试 考生登录前台参加考试&#xff0c…

C++实现stack【栈】

要求&#xff1a; //****file: stack.h/*对stack进行初始化检查stack为空&#xff0c;或已满将整数压入到stack中从stack里弹出整数 不移除任何袁术&#xff0c;讲过stack的内容输出到标准输出Stack类的私有成员如下&#xff1a;一个用于打印错误信息的私有哦成员函数三个私有数…

c#操作Excel整理总结

大家好&#xff0c;这是我在工作中总结的关于C#操作Excel的帮助类&#xff0c;欢迎大家批评指正&#xff01; using System; using System.Collections.Generic; using System.Data; using System.Data.OleDb; using System.IO; using Aspose.Cells;namespace MusicgrabTool {p…

C++ std::function<void(int)> 和 std::function<void()> 作为函数参数的注意事项

前言 std::function 作为标准库提供的函数指针&#xff0c;使用起来还是比较方便的&#xff0c;不过在使用过程中有一些需要注意的细节&#xff0c;这里做一个简单的记录。 基本使用 头文件: #include <functional>语法&#xff1a;std::function<return_type(args…

Java项目:网上电商系统(java+SSM+mysql+maven+tomcat)

源码获取&#xff1a;博客首页 "资源" 里下载&#xff01; 一、项目简述 功能&#xff1a;本系统分用户前台和管理员后台。 前台展示后台管理&#xff0c;前台界面可实现用户登录&#xff0c;用户注 册&#xff0c;商品展示&#xff0c;商品明细展示&#xff0c;用户…

C# SQLiteHelper

1 public class SQLiteHelpers2 {3 /// <summary> 4 /// ConnectionString样例&#xff1a;DatasourceTest.db3;Poolingtrue;FailIfMissingfalse 5 /// </summary> 6 public static string ConnectionStri…

[Git] 拉开发分支的代码报错

Git拉开发分支的代码报错&#xff1a; fatal: The remote end hung up unexpectedly fatal: early EOF fatal: index-pack failed 解决办法&#xff1a; git config --global core.compression -1 转载于:https://www.cnblogs.com/MasterMonkInTemple/p/10754596.html

C++ 通过模版工厂实现 简单反射机制

前言 我们知道Java/Python这种语言能够很好得 支持反射。反射机制 就是一种用户输入的字符串到对应实现方法的映射&#xff0c;比如http接口中 用户传入了url&#xff0c;我们需要调用该url对应的方法/函数对象 从而做出对应的操作。 而C 并没有友好得支持这样的操作&#xf…

计算机世界的“十六进制”为什么如此重要

在计算机世界中,十六进制扮演着不可或缺的角色。它以其紧凑的表示形式、与二进制的天然对应关系以及在各个领域的广泛应用,成为了计算机科学中的一把重要工具。总体而言,计算机需要十六进制并非偶然,它是一种为了更好地满足人类理解和处理数据的需求而产生的工具,为计算机科学的发展和应用提供了便利和支持。