让我们进入面向对象的世界(一)

news2024/11/16 9:42:07

让我们进入面向对象的世界


文章目录

  • 让我们进入面向对象的世界
  • 开场白
  • 一.面向对象概述
  • 二.认识对象和类
  • 2.1什么是类
  • 2.2 什么是对象呢?
  • 2.3 让我们来创建第一个对象
  • 2.3 让我们进一步了解,我们针对对象的操作,是怎样的

开场白

大家好!,从今天开始我们就正式进入对象村了,这里遍地都是对象,我记得有人经常跟我说,来到对象村,就能找对象。
在进入面向对象之前,大家仔细的回忆一下,我们在学习C语言的时候,是不是执行的程序代码都是过程化的。但在面向对象里面,我们需要建立自己的对象类型,设立自己的对象类型,让开发变得很有趣,以及让对象变得更美好,相信我,一旦进入对象村,你就不想回头了。

一.面向对象概述

一如既往的我们来认识一下,对象村的枯燥规则
面向对象程序设计(简称 OOP) 是当今主流的程序设计范型, 它已经取代了 20 世纪 70
年代的“ 结构化” 过程化程序设计开发技术。Java 是完全面向对象的, 必须熟悉 OOP 才能
够编写 Java 程序。
面向对象的程序是由对象组成的, 每个对象包含对用户公开的特定功能部分和隐藏的实
现部分。程序中的很多对象来自标准库,还有一些是自定义的。究竟是自己构造对象, 还是
从外界购买对象完全取决于开发项目的预算和时间。但是, 从根本上说, 只要对象能够满足
要求,就不必关心其功能的具体实现过程。在 OOP 中, 不必关心对象的具体实现,只要能
够满足用户的需求即可。

看了这么一大坨东西,是不是很绝望,很懵逼,这对象村咋了,怎么这么多事,天天要求我这,天天要求我哪。

让我们引入一个简单的例子来说明
假设有一天你和你的朋友正在办公室工作,你的白痴老板给了一个任务给你们,要求你们谁先完成这个任务就可以得到奖金。
任务要求是:
画出正方形、三角形、圆形。当用户点击图形的时候图形需要顺时针旋转360度并根据不同的形状播放不同的音效文件。

我同事的想法如下:
他很从容的想到,这个程序要做什么,需要什么动作。他就着手开始设计程序了。

 rotate(shapeNum) {
 // 旋转360
 }
 playSound(shapeNum) {
 // ֱ查询播放哪个个文件
 //播放
 }

然后你脑瓜子一转,这不就是三个不同的事物和用户吗

这里圆形、正方形、三角形,难道不就是三个类吗?
于是你转身开始了设计:

//正方形
class Square(){
//动作
rotate(){}
//播放
playSouurd(){
}

}
//圆形
class Circle(){
//动作
rotate(){}
//播放
playSouurd(){
}
}
//三角形
class Triangle(){
//动作
rotate(){}
//播放
playSouurd(){
}

}

你这样看俩人的设计没啥区别,但这个时候,你的老板来考问你,我觉得图形不够用了,你必须给我在增加一个六边形,能做到吗?你们俩。当然此时此刻,你的朋友慌了。
他的设计思路如下

 rotate(shapeNum) {
 // 旋转360
 }
 playSound(shapeNum) {
 // ֱ查询播放哪个个文件
 //播放
 }

你会发现一旦加入新图形,他就要在playSound加入判断,如果是六边形的话,就做出相应的判断,然后执行相应的方法,但你想啊,此时此刻,你都已经写完了,如果又加新的东西进去,是不是变得非常麻烦了呢?

这时候你的设计思路就比较面向对象。
你直接甩出一个六边形类

class hexagon(){
//动作
rotate(){}
//播放
playSouurd(){
}
}

如果说到这里你还是没觉得过程化的没有什么不好的话,我们再来看,如果你的老板又说,你这个旋转六边形,必须按照指定的(x,y)坐标旋转。
此刻你的朋友又得把之前的代码重新写一遍

 rotate(shapeNum,xPt,YPt) {
 //如果不是旋转点
 	//计算旋转点
 	//然后旋转
 //否则
 	//以x 和 y定为旋转中心
 	//然后旋转即可
 }
 playSound(shapeNum) {
 // ֱ查询播放哪个个文件
 //播放
 }

而你只需要定义六边形的时候,改变它的方法即可,并不需要改变整体

int xPoint
int yPoint
rotate() {
 // 使用 x和 y
 // 执行旋转
 }
playSound() {
//播放 
 }

哈哈 ,相信到这里,你就已经理解了面向对象的便捷性了吧。
当然,到这里还没有结束,你的朋友开始与你争论了,他倔强的说,你这不也是过程化吗?你这每个物体都有重复的方法。没看出跟我有什么不同。

其实解释他的困惑很简单。
首先我们把这三种物体叫做类、另外我们之所有重复的代码,是因为我们还没有引入面向对象的继承特性。
我这里画个图,让大家简单理解一下面向对象的继承特性是怎么来的。

在这里插入图片描述
这里子类是完全可以继承父类的方法的,这就打消了说的重复代码的结果。

这时候又有人会问?那新生成的六边形方法跟父类的完全就不同,我们继承过来又有什么用呢?java当然都替我们考虑好了,当我们重用父类的方法的时候,子类可以进行重写。

说了这么一大堆,我们该怎么去调用这个类去执行这个方法呢?

“这就是面向对象的重点。当你要旋转某个三角形的时候,程序代码会调用该三角形对象的rotate()方法。调用的一方不需知道该对象如何执行这个动作。如果要加入新的对象,只要写出该对象类型的类就行,让新的对象维持自己的行为。

这就是你的设计思想的高明之处,奖金是你的了,哈哈。

二.认识对象和类

怎么说呢?这个问题该怎么解释呢?
简单一点理解吧!
类是用来对一个实体(对象)来进行描述的,主要描述该实体(对象)具有哪些属性(外观尺寸等),哪些功能用来干啥),描述完成后计算机就可以识别了。
当然我们要时刻记住一点,对象是靠类塑造出来的。也就是常说的,类的实例化就是对象。

2.1什么是类

首先说明哈,类不是对象,类是对象的蓝图,举个例子来说,现在有一个Dog类

class Dog{
	int size;
	string color;
	string name;
}
// 狗的属性
public void barks() {
System.out.println(name + ": 旺旺旺~~~");
}
// 狗的行为
public void wag() {
System.out.println(name + ": 摇尾巴~~~");
}

它能创造出很多的对象,比如说泰迪狗、旺财狗、哈巴狗、香肠狗、种种,但根据类创建的对象。就是实例化变量。

2.2 什么是对象呢?

大家都知道通讯录吧,对象好比就是通讯录的每一笔数据,填入一笔新的数据,就如同创建了对象,然后吧,你就会对对象进行操作,比如查看、删除、增加等等。
但注意一点哈,这些对象都是相互独立的。

2.3 让我们来创建第一个对象

这里在开始创建对象之前,我们需要俩个类。一个是实例化对象的类,一个是测试该类的类,说起来有点绕口,大概就是,我会用main方法来,操作建立的对象。

class Dog{
	int size;
	string color;
	string name;
}
// 狗的属性
public void barks() {
System.out.println(name + ": 旺旺旺~~~");
}
// 狗的行为
public void wag() {
System.out.println(name + ": 摇尾巴~~~");
}
class Test(){
	 public static void main(String[] args) {
		//创建第一个对象
		Dog d =new Dog();//建立一个狗对象。
		d.size=40;//存取该对象的变量
		d.barks();//调用对象的方法
}
}

大家大概已经理解了,上面的过程吧,让我们来进入下一个回合。

2.3 让我们进一步了解,我们针对对象的操作,是怎样的

我们定义了创建对象之后,我们该怎么给对象的变量,传参的呢?大家想过没有?
当然这里java已经提供了一个构造方法。具体的用法如下:

public class PetDog {
   public String name;
   public String color;
	//无参数的构造方法
    public PetDog() {

    }
    //有参数的构造方法。
    public PetDog(String name, String color) {
        this.name = name;
        this.color = color;
    }
    public  void wangwang(){
        System.out.println(name+"汪汪叫");
    }
    public  void wag(){
        System.out.println(name+"摇尾巴");
    }
}

public class Main {
    //类的实例化
    //用类类型创建对象的过程,称为类的实例化,在java中采用new关键字,配合类名来实例化对象。
    public static void main(String[] args) {
        PetDog Dog=new PetDog();//创建对象的时候,我们就调用了,构造方法。
        Dog.name="旺财";
        Dog.color="红色";
        Dog.wag();
        Dog.wangwang();
	 	PetDog Dog2=new PetDog("哮天犬","白色");//调用有参的构造方法
	 	Dog2.wag();
        Dog2.wangwang();
	 
    }
}

运行结构如下:
在这里插入图片描述

解释了,对象怎么实例化变量之后,相信你在上述的程序中,看到了一个this引用,这个东西,相信你应该也很好奇

 public PetDog(String n, String c) {
        name = n;
        color = c;
    }
}

你说我们也可以这样写呀,为什么要加this这个引用呢?
这里我用一个例子来解释你的疑惑。

public class Date {
public int year;
public int month;
public int day;
public  Date(int year, int month, int day){
year = year;
month = month;
day = day;
}
public void printDate(){
System.out.println(year + "/" + month + "/" + day);
}
public static void main(String[] args) {
// 构造三个日期类型的对象 d1 d2 d3
Date d1 = new Date(2022,10,30);
d1.printDate();


}
}

执行结果如下:
在这里插入图片描述
这上面就说明了.形参名不小心与成员变量名相同,那么就是自己给自己赋值,当然输出的是空的,

加上this的引用就是为了指明变量代表的是当前对象,免得混淆。
这里再做个小总结:

  1. this的类型:对应类类型引用,即哪个对象调用就是哪个对象的引用类型
  2. this只能在"成员方法"中使用
  3. 在"成员方法"中,this只能引用当前对象,不能再引用其他对象

相信你在我的介绍下,已经逐步的进入了对象村了,我会再接下的讲解中,带你逐步去了解面向对象的特性。

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

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

相关文章

SpringMVC请求、响应与异步请求

文章目录SpringMVC核心架构的具体流程步骤一、SpringMVC请求与响应1、SpringMVC Handle原理与应用1.1 概念1.2 Spring MVC Handler的三种写法2、SpringMVC 视图解析器2.1 概念2.2 配置视图解析器二、SpringMVC异步请求1、 Ajax基本配置2、 异步与同步优缺点:如何设置…

基于TMI8421的3D打印机步进电机解决方案

打印机一直是工作中不可缺少的一部分,当下,随着3D打印技术的推广,3D打印机逐渐进入我们的生活与工作当中。每个人都期望可以在办公室环境下安静快速的打印,更高效地完成每项打印工作;更生动逼真的重现理想的3D模型。而…

实战:如何优雅地扩展Log4j配置?

前言 Log4j 日志框架我们经常会使用到,最近,我就遇到了一个与日志配置相关的问题。简单来说,就是在原来日志配置的基础上,指定类的日志打印到指定的日志文件中。 这样讲述可能不是那么好理解,且听我从需求来源讲起。…

【10】leetcode note

题目: 799. 香槟塔 个人总结 799. 香槟 我们把玻璃杯摆成金字塔的形状,其中 第一层 有 1 个玻璃杯, 第二层 有 2 个,依次类推到第 100 层,每个玻璃杯 (250ml) 将盛有香槟。 从顶层的第一个玻璃杯开始倾倒一些香槟&…

基于铁犀牛ironrhino平台的税务档案管理系统

目录 摘要 2 引言 5 1.1 选题背景 6 1.2 国内外研究现状 7 1.3课题研究的重要性 8 2. 系统的需求与分析 8 2.1 系统的功能介绍 9 2.1.1 业务信息描述 9 2.1.2 系统功能说明 10 2.1.3 系统的开发目标 11 2.2 系统分析 12 2.2.1 铁犀牛的功能 12 2.2.2 铁犀牛工作原理 13 2.2.3 铁…

翻阅必备----Java窗口组件,容器,布局,监听,事件 API大全

---------------------------------------------------------------------------------------- 👨‍💻个人主页:元宇宙-秩沅 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 本文由 秩沅 原创 收录于专栏 java ⭐Jav…

将存在课题的过程可视化,丰田的“自工程完结”是什么?

将存在课题的过程可视化,丰田的“自工程完结”是什么? “全日本的公司是不是都发生了奇怪的事情呢?人们常说日本人很勤劳。所以要拼命努力。但是,有很多人拼命努力却毫无成果。(中略)这样才不会有动力。明明很努力却没有成果,我认为这才是奇…

将SpringBOOT项目 打成 war 包 并 部署到 Tomcat

当前环境&#xff1a;Windows Tomcat版本&#xff1a;tomcat8.5 SpringBoot版本&#xff1a; 2.2.3 1. pom.xml 修改打包方式 <packaging>war</packaging> 2.加入SpringBoot打包插件&#xff08;pom.xml&#xff09; <build><plugins><plugin&g…

Jmeter的使用说明

一、安装Jmeter工具 链接&#xff1a;https://pan.baidu.com/s/1ZYc15eq9DO-r0ChKHxMXlg?pwdckcd 提取码&#xff1a;ckcd --来自百度网盘超级会员V5的分享二、Jmeter的常用元器件说明 jmeter八大元件件&#xff1a;取样器&#xff0c;前置处理器&#xff0c;后置处理器&a…

计算机网络——第六章笔记(1)

传输层 传输层是层是整个协议栈(TCP/IP)的核心。 任务&#xff1a;是提供可靠的、高效的数据传输。 面向连接的服务 1、端到端的连接管理 建立连接 数据传输 释放连接 2、流控制 3、差错控制 传输环境&#xff1a;通信子网、物理信道。 传输服务和网络服务的两个主…

网络了解编程五层协议

一:了解 1.了解一下网络: 局域网(LAN),一个上课的机房,多个连在同一个路由器上的设备,就是在一个局域网中---打游戏 (局域网内的主机之间能方便的进行网络通信&#xff0c;又称为内网&#xff1b;局域网和局域网之间在没有连接的情况下&#xff0c;是无法通信的) 广域网(WAN) ,…

无线 LAN 服务概述

无线 LAN 服务是 Windows Server 2008 R2 和 Windows Server 2008 中的一项功能&#xff0c;可用于启用无线 WLAN 自动配置服务&#xff0c;以及配置 WLAN 自动配置以自动启动。一旦启用后&#xff0c;WLAN 自动配置会动态选择计算机将自动连接的无线网络&#xff0c;并配置无线…

项目管理的四大模型,PM必懂的事半功倍模型!

瀑布模型、迭代模型、增量模型、原型模型&#xff0c;是项目管理常见的四种模型。每种模型都有其优缺点和适用的项目类型。项目经理针对不同的项目用对模型&#xff0c;才能起到事半功倍的作用。 今天就讲讲这四种模型及其优缺点&#xff1a; 如果你需要项目管理相关资料可拉…

代码质量与安全 | “吃狗粮”能够影响到代码质量?来了解一下!

“dogfooding”是什么&#xff1f;乍一看&#xff0c;这就是“吃狗粮”的意思&#xff0c;但其实这来源于一句俚语&#xff1a;“Eat your own dog food”&#xff0c;直译过来就是“吃自己的狗粮”&#xff0c;常用于描述公司使用自己产品的这一种情况。 “吃自己的狗粮”实践…

(更新中)【后端入门到入土!】Java+Servlet+JDBC+SSM+SpringBoot+SpringCloud 基础入门

目录 第一部分&#xff1a;Java 基础语法&#xff08;已完结&#xff09; 第二部分&#xff1a;Java 高级&#xff08;已完结&#xff09; 第三部分&#xff1a;Servlet&#xff08;待更新……&#xff09; 第四部分&#xff1a;JDBC&#xff08;待更新……&#xff09; 第…

如何搭建一套指标体系?

一、引言 (1)为什么指标体系这么重要? (2)什么是指标体系? (3)指标体系的衡量标准是什么? (4)如何去搭建一套好好的指标体系? 只要弄清楚了这4个问题,指标体系的搭建工作就迅速地开展、快速地落地,精准地产生业务价值。以上是对于数据同学而言的工作。此外,对于…

漏洞练习环境搭建笔记

Docker 安装&#xff08;ubuntu&#xff09; 1.常归删除操作 sudo apt-get autoremove docker docker-ce docker-engine docker.io containerd runc 2. 删除docker其他没有没有卸载 dpkg -l | grep docker dpkg -l |grep ^rc|awk ‘{print $2}’ |sudo xargs dpkg -P # 删除无…

雷神MixBook Air笔记本系统故障怎么重装?

雷神MixBook Air笔记本系统故障怎么重装&#xff1f;有用户使用的雷神MixBook Air笔记本系统出现了故障&#xff0c;导致无法正常的使用电脑了。这个情况我们可以使用U盘来重装一个系统&#xff0c;恢复正常的使用。那么具体要怎么去进行操作&#xff0c;看看具体的方法吧。 准…

python多维数组切片

1、数组a第0个元素&#xff08;二维数组&#xff09;下的所有子元素&#xff08;一维数组&#xff09;的第一列 import numpy as np bnp.arange(24) ab.reshape(2,3,4) print a print a[0,:,0] 2、取所有二维数组下的每个二维数组的第0个元素&#xff08;一维数组&#xff09; …

会计部门通过数字化工作流程提高生产力

会计部门通过数字化工作流程提高生产力 基于纸张的会计流程令人担忧&#xff0c;在一些企业中&#xff0c;基于纸张的会计流程正在削弱企业的竞争力。 现在&#xff0c;企业高管们比以往任何时候都更想知道哪些技术在数字业务战略中作用最大&#xff0c;在简化会计流程方面&…