面向对象——类和对象

2023-05-16

一、面向对象的概念

面向对象是一种符合人类思维习惯的编程思想。现实生活中存在各种形态不同的事物,这些事物之间存在着各种各样的联系。在程序中使用对象来映射现实中的事物,使用对象的关系来描述事物之间的联系,这种思想就是面向对象。
提到面向对象,自然会想到面向过程,面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤–实现, 使用的时候依次调用就可以了。面向对象则是把构成问题的事务按照一定规则划分为多个独立的对象,然后通过调用对象的方法来解决问题。当然,-个应用程序会包含多个对象,通过多个对象的相互配合来实现应用程序的功能,这样当应用程序功能发生变动时,只需要修改个别的对象就可以了,从而使代码更容易得到维护。面向对象的特点主要可以概括为封装性、继承性和多态性,接下来针对这3种特性进行简单介绍。

1.封装性

封装是面向对象的核心思想,将对象的属性和行为封装起来,不需要让外界知道具体实现细节,这就是封装思想。例如,用户使用计算机,只需要使用手指敲键盘就可以了,无需知道计算机内部是如何工作的,即使用户可能碰巧知道计算机的工作原理,但在使用时并不完全依赖计算机工作原理这些细节。

2.继承性

继承性主要描述的是类与类之间的关系,通过继承,可以在无需重新编写原有类的情况下,对原有类的功能进行扩展。例如,有一个汽车的类,该类中描述了汽车的普通特性和功能,而轿车的类中不仅应该包含汽车的特性和功能,还应该增加轿车特有的功能。这时,可以让轿车类继承汽车类,在轿车类中单独添加轿车特性的方法就可以了。继承不仅增强了代码的复用性,提高了开发效率,还为程序的维护补充提供了便利。

3.多态性

多态性指的是在程序中允许出现重名现象,它指在–个类中定义的属性和方法被其他类继承后,它们可以具有不同的数据类型或表现出不同的行为,这使得同一个属性和方法在不同的类中具有不同的语义。例如,当听到“Cut” 这个单词时,理发师的行为是剪发,演员的行为表现是停止表演,不同的对象所表现的行为是不一样的。
面向对象的思想只靠上面的介绍是无法真正理解的,只有通过大量的实践去学习和理解,才能将面向对象真正领悟。

类于对象

类于对象的概念

面向对象的编程思想,力图人程序中对事物的描述于该事物在现实中的形态保持一致。为了做到这一点,面向对象的思想中提到了两个概念——类和对象
类是对某一事物的抽象描述,而对象用于表示现实中该事物的个体。
对象是根据类创建的,并且一个类可以对应多个对象。
(对象是实例,而类是创建对象的模板)
举例说明:
可以将动物这类生物看作是一个类,将每一种动物(兔子,狗,猫。。。)看作对象,从猫和动物之间的关系便可以看出类与对象的关系。类是一类物体的总称,而对象是这个总称下面的各种事物。在这里插入图片描述
好比图中“多边形”就是类,而里面的菱形、圆、三角形
六边形、平行四边形就是类

类的定义

  • 在面向对象的思想中,最核心的就是对象。为了在程序过程中创建对象,首先需要定义一个类。

  • 类似对象的抽象,它用于描述一组对象的共同特征和行为。

  • 类中可以定义成员变量和成员方法,其中成员变量用于描述对象的特征,也被称作属性;成员方法用于描述对象的行为,简称为方法。

  • 案例:定义一个类

class Person{
     int age;			//定义int类型的变量age
     //定义speak()方法
     void speak(){
     System.out.println("大家好,我今年" + age + "岁!");
     }
 }

其中。Person是类名。age是成员有变量,speak()是成员方法。在成员方法speak()中可以直接访问成员变量age。
**

  • 注意:在Java中,定义在类中的变量的被称为成员变量,定义在方法在的变量被称为局部变量。如果在某一个方法中定义的局部变量与成员变量同名,这种情况是允许的,此时方法中通过变量名访问的是局部变量,而不是成员变量。

**

 class Person {
    int age = 10;       //类中定义的变量被称作成员变量
    void speak(){
        int age = 60;   //方法内部定义的变量被称作局部变量
        System.out.println("大家好,今年我" + age + "岁!");
    }
}

上面代码中。在Person类的speak()方法中有一个打印语句,访问了变量age,此时访问的是局部变量age。也就是说,当有另外一个程序来调用speak()方法时,输出的值是60,而不是10.

对象的创建于使用

1、在Java程序中可以使用new关键字来创建对象:

类名 对象名称 = new 类名( );

例如,创建Person类的实例对象代码:

Person p = new Person( );

2、创建好对象后,可以通过对象的引用来访问所有的成员,具体格式如下:

对象引用 . 对象成员
class Person {
     int age;
     void speak() {
        System.out.println("我今年"+ age+"岁");
    }
    
    public static void main (String[] args){
        Person p1 = new Person();       //创建第一个Person对象
        Person p2 = new Person();       //创建第二个Person对象
        p1.age = 18;                    //为age属性赋值
        p1.speak();                 //调用对象的方法
        p2.speak();
    }
}

//运行结果:
//我今年18岁
//我今年0岁

3、在实例对象时,Java虚拟机会自动为成员变量进行初始化,针对不同的类型的成员变量,JAVA虚拟机会赋予不同的初始值:

成员变量类型初始值
byte、short、int0
long0L
float0,0F
double0.0D
char空字符,’\u0000’
booleanfalse
引用数据类型null

上面例子中之所以对输出“我今年0岁”正是因为虚拟机自动赋予的初始值,因为p2对象我们没有对其进行赋值,虚拟机自动为p2赋值0。
4、当对象被实例化后,在程序中可以通过对象的引用变量来访问该对象的成员。需要注意的是,当没有任何变量引用这对象时,它将成为垃圾对象,不能再被利用。
5、在Java中,null是一种特殊的常量,当一个变量的值为null时,则表示该变量不指向任何一个对象。在程序运行时,当变量被置为null,被引用的对象就会失去引用,成为垃圾对象

class Person {
        void say(){
            System.out.println("我爱你!!");
        }
    }
    class Persons{
        public static void main(String[] args){
            Person p2 = new Person();
            p2.say();
            p2 = null;
            p2.say();
        }
    }
 //输出结果:
 //我爱你!!
 //Exception in thread "main" java.lang.NoSuchMethodError: 面向对象.Person.say()V
//	at 面向对象.Persons.main(Persons.java:11)

例子中,创建了一个Person类的实例对象,并两次调用了该对象的say()方法。第一次调用say()方法时可以正常打印,但在第10行代码中将变量p2的值置为null,当再次调用say()方法时抛出了空指针异常*。在Java中,null 是一种特殊的常量, 当一个变量的值为null时,则表示该变量不指向任何一个对象*。在程序运行时,当把变量p2置为null,那么被p2所引用的Person对象就会失去引用,成为垃圾对象。

类的设计

在Java中,对象是通过类创建出来的。因此,在程序设计时,最重要的就是类的设计。
案例:
假设要在程序中描述一个学校所有学生的信息。可以设计一个学生类(Student),在这个类中定义两个属性name、age,分别表示学生的姓名和年龄,定义一个方法introduce()表示学生做自我介绍。

public class Student{
	String name;
	inr age;
	public void introduce(){
		System.out.println("大家好!我李华!");
		}
	}

为了便于寻找相关属性,整洁,我们在设计类名,属性名时一定要尽可能的用符合所描述物体的名称来定义!

类的封装(基础篇)

所谓类的封装是指在定义一个类时,将类中的属性私有化,即使用private关键字来修饰。
私有属性只能中它所在类中被访问。如果外界想要访问私有属性,需要提供public修饰的公有方法,其中包括用来获取属性值的 getXXX 方法和设置属性值的 setXXX 方法
下面我们通过一个案例来实现类的封装:

class Student {
    private String name;    //将name属性私有化
    private int age;        //将age属性私有化
    // 下面是有公有的 getXxx 和 setXxx方法
    public String getName(){
        return name;
    }
    public void setName (String stuName) {
        name = stuName;
    }
    public int getAge(){
        return age;
    }
    public void setAge(int stuAge) {
        //下面是对传入的参数进行检查
        if (stuAge <= 0) {
            System.out.println("对不起,您输入的年龄不合法。。。");
        }else {
            age = stuAge;   //对属性赋值
        }
    }
    public void introduce(){
        System.out.println("大家好,我叫" + name + ",今年" + age + "岁!");
    }
}
public class 类的封装1 {
    public static void main (String[] ages){
        Student stu = new Student();
        stu.setAge(-30);
        stu.setName("李华");
        stu.introduce();
    }
}

//运行结果:
//对不起,您输入的年龄不合法。。。
//大家好,我叫李华,今年0岁!

在案例,Student类中,使用private关键字将属性name和age声明为私有,对外界提供了几个公有的方法。其中,getName()方法用于获取name属性的值,setName()方法 用于设置name属性的值,同理,getAge()和setAge()方法用于获取和设置age属性的值。在 main() 方法中创建了Student对象,并调用setAge()方法传入一个负数-30,在setAge()方法中会对参数stuAge的值进行检查,由于当前传入的值小于0,因此会输出“对不起,您输入的年龄不合法”的信息,age属性没有被赋值,仍为初始值0。

结语

好好学习,天天向上,一起加油!!!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

面向对象——类和对象 的相关文章

  • 解决阿里云端口不通 配置安全组无效

    1 先在阿里云控制台添加安全组 2 再登录服务器 xff0c 开通端口 firewall cmd zone 61 public add port 61 7474 tcp permanent 必须reload firewall cmd rel
  • abaqus应力值导出并进行后处理(同一节点多个应力值如何处理?)

    Abaqus应力导出 xff1a Tools Probe values 在Probe Values里面可以选择需要导出的信息 xff0c 比如 Nodes 或者 Elements 如果需要导出多个应力值或者其他信息可以选择 Componen
  • collect2: fatal error: ld terminated with signal 9 [Killed]

    Q What is this kind of build error representative of collect2 ld terminated with signal 9 Killed A There is not enough v
  • VNCserver 配置 gnome 桌面

    HOWTO Linux VNCserver By Erik Rodriguez This article is a HOWTO for running VNCserver on Linux These examples are specif
  • 附加!-关于安装R4.0.0-详细步骤

    附加博客 关于安装R 详细步骤 在我下载完毕之后 xff0c 发现对于第一次安装的 小白 来说可能还是有一点儿彷徨 xff0c 所以下面的步骤就以图的形式来走一遍 xff1a 第一步 xff1a 下载得到下图 xff1a xff08 R 4
  • 【牛客网 - 华为机试 - HJ5 进制转换】

    描述 写出一个程序 xff0c 接受一个十六进制的数 xff0c 输出该数值的十进制表示 数据范围 xff1a 保证结果在 输入描述 xff1a 输入一个十六进制的数值字符串 输出描述 xff1a 输出该数值的十进制字符串 不同组的测试用例
  • Java JDK11的下载与安装

    前言 本篇文章是基于win10系统下载安装JDK11的教程 1 下载Oracle JDK 进入Oracle 官网 xff1a https www oracle com java technologies downloads java11 选
  • 电脑怎样删除警告“操作无法完成“的文件夹

    问题概述 虽然系统这样的提示了 xff0c 但是我们查看一下桌面没有看到任何正在运行的程序啊 xff0c 这是怎么了 xff0c 是不是系统出错了 其实不是系统出错了 xff0c 只是有的应用程序在后台运行 xff0c 我们根本看不到 xf
  • 使用python解决三门问题(Monty Hall Problem)实验

    问题描述 奖品随机分布在3扇门后 xff0c 客户随机选择其中一扇 xff0c 主持人打开另外两扇中任意没有奖品的一扇 xff0c 问客户选择以下哪种策略赢面更大 xff1a 1 坚持原来的选择 2 改选剩下的那扇未打开的门 问题分析 1
  • 75个顶级开源安全应用

    本文转载自 xff1a http www iii soft com forum php mod 61 viewthread amp tid 61 1513 随着网络犯罪的日益增多 xff0c 或许我们需要更多资金投入到安全方面 不过 xff
  • IntelliJ IDEA 常用设置大全

    对IDEA的配置进行优化 xff0c 目的是为了个性化定制提高编码效率 以下为个人通过自己平时积累及网络上分享技巧进行总结 文章标题有点多 xff0c 可通过目录进行快速跳转 基本以下的配置就足以在工作中提高效率 xff0c 按步配置完成后
  • Windows 安装并配置 MySQL 5.6

    1 xff0c 下载 MySQL 压缩包 1 1 xff0c 打开 https www mysql com xff0c 进入 MySQL 的官方网站 xff0c 点击 Downloads xff0c 进入 下载中心 1 2 xff0c 在
  • Git 常用命令记录

    文章目录 安装卸载配置管理不常见的使用场景Idea更新项目失败忽略文件的权限变化配置自动换行创建SSH密钥多账号ssh配置免密码登录远程服务器https协议下提交代码免密码文件推向3个git库修改远程仓库地址撤销远程记录放弃本地的文件修改最
  • Docker 学习笔记 | 常用命令

    文章目录 什么是 DockerDocker 理念能做什么Docker 基本组成 Linux 中安装CentOS 6 8 安装 DockerCentOS 7 安装 DockerDocker 中国官方镜像加速使用 registry mirror
  • Debain查看端口占用开放端口

    查看指定端口服务 查看3002被哪些服务占用 xff1a sudo lsof i 3002 关闭指定服务 xff1a kill PID 端口开放 编辑文件 xff1a vi etc nftables conf 修改内容如下 usr sbin
  • pm2命令使用

    文章目录 常用命令示例 常用命令 启动应用程序 pm2 start lt app name gt 停止应用程序 pm2 stop lt app name gt 重启应用程序 pm2 restart lt app name gt 删除应用程序
  • Markdown入门指南

    导语 一 认识Markdown 使用Markdown的优点 二 Markdown 语法 标题列表 嵌套列表 引用图片与链接 自动链接 粗体与斜体表格代码框 其它 分割线索引超链注释 转义字符段落缩进 空格 字体 字号 颜色 导语 Markd
  • Markdown进阶语法

    文章目录 markdown进阶语法内容目录加强代码块脚注流程图时序图LaTeX公式 markdown进阶语法 内容目录 使用 TOC 引用目录 xff0c 将 TOC 放至文本的首行 xff0c 编辑器将自动生成目录 有一些编辑器不支持 T
  • Maven 变量及常见插件配置详解

    一 变量 自定义变量及内置变量 1 自定义变量2 内置变量 二 常见插件配置 1 编译插件2 设置资源文件的编码方式3 自动拷贝 jar 包到 target 目录4 生成源代码 jar 包5 将项目打成 jar 包 assembly xml
  • Dos命令讲解

    一 什么是DOS二 启动DOS的多种方法 三 DOS的内部命令与外部命令四 系统环境变量讲解 增加Path环境变量路径常见的系统环境变量 五 常用的运行命令六 DOS使用技巧 设置CMD的默认路径设置CMD的字体 背景颜色设置快捷键启动CM

随机推荐

  • 题解:luogu P5568 [SDOI2008]校门外的区间

    题解 xff1a luogu P5568 SDOI2008 校门外的区间 luogu P5568 SDOI2008 校门外的区间 前置知识 xff1a 珂朵莉树 问题一 xff1a 开闭区间 区间端点均为整数 xff0c 不妨认为 xff0
  • 常用DOS命令之通俗易懂篇

    摘要 xff1a 讲解常用的Dos命令 xff0c 如果需要学习更多的命令可以使用cmd的help工具 文章内容较长 xff0c 可以通过搜索来查找对应的命令 常用DOS命令之通俗易懂篇 Arp 命令Assoc 关联At 计划服务Attri
  • 修改/忘记数据库密码

    文章目录 如何修改数据库密码一 用 SET PASSWORD 命令二 用 mysqladmin三 用 UPDATE 直接编辑 user 表四 在忘记 root 密码的时候 xff0c 可以这样windows下修改linux下修改 五 解决5
  • 远程桌面,身份验证错误:要求的函数不正确等解决办法

    问题解决方法具体解决办法windows 家庭版家庭版最终解决方案 问题 windows 版本 10 0 17134 xff0c 安装最新补丁后无法远程 windows server 2008 2013 2016 服务器 报错信息如下 xff
  • Apache的配置详解 带图

    Apache 的配置详解 带图 1 01 ServerRoot 配置1 02 Mutex default logs1 03 Listen 配置1 04 Dynamic Shared Object DSO Support 动态共享对象支持 1
  • IIS 反向代理到 Apache、Tomcat

    环境工具需求教程 反向代理 IIS 反向代理可以将请求的网址重写到其它网址 xff0c 达到转发的目的 一般用于一台服务器只允许开启80端口 xff0c 而80端口又被IIS使用 xff0c 此时需要在IIS中设置URL重写 xff0c 将
  • 使用hexo+github搭建免费个人博客详细教程

    Windows环境下Git安装 配置SSH key 安装node js npm 安装Hexo及配置 发布博客 前言 使用github pages服务搭建博客的好处有 xff1a 全是静态文件 xff0c 访问速度快 xff1b 免费方便 x
  • Hexo使用细节及各种问题

    解决markdown图片不显示 返回403 forbidden 添加本地图片无法显示 修改文章page模板 同时发布同步到多个仓库站点 Github coding 图片不显示 在使用过程中 xff0c 会发现有的引用图片无法显示的问题 但是
  • 实现Github和Coding仓库等Git服务托管更新

    如何使Github Coding Gitee 码云 同时发布更新 xff0c 多个不同Git服务器之间同时管理部署发布提交 缘由 因为在Github上托管的静态页面访问加载速度较为缓慢 xff0c 故想在Coding上再建一个静态页面的项目
  • 渗透测试常用工具

    包括 Burp Suite Acunetix Web Security with Acunetix Vulnerability Scanner Sqlmap Layer PentestBox Struts 2漏洞检测 御剑工具集锦 Kali
  • Jetbrains IntelliJ IDEA PyCharm 注册激活(2018最新)

    AppCode CLion DataGrip GoLand IntelliJ IDEA PhpStorm PyCharm Rider RubyMine WebStorm下载注册激活 官方下载地址 AppCode CLion DataGrip
  • 有道翻译反反爬虫(python)

    有道翻译反反爬虫 xff08 python xff09 该博客创作于2021 6 30 xff0c 之后有失效可能 作为一个初学者 xff0c 花两天时间破解了有道翻译的反爬虫系统 xff0c 故为之文以记之 参考文章 xff1a 博客1博
  • 建一个别人打不开的文件夹

    怎么创建一个打不开的文件夹 xff0c 文件夹打不开 相信大家都遇到过自己的一些隐私文件不愿意让别人看到的情况吧 xff0c 怎么解决呢 xff1f 隐藏起来 xff1f 换个名字 xff1f 或者加密 xff1f 这些办法都可以办到 xf
  • Sublime入门

    文章目录 Sublime入门介绍下载安装安装Sublime Text3 安装插件插件安装器用Package control安装插件用Package control卸载插件用Package control更新插件 Sublime入门 介绍 S
  • 正则表达式入门教程

    文章目录 什么是正则表达式 1 基本匹配2 元字符2 1 点运算符 96 96 2 2 字符集2 2 1 否定字符集 2 3 重复次数2 3 1 96 96 号2 3 2 96 43 96 号2 3 3 96 96 号 2 4 96 96
  • Centos7上卸载重装MariaDB数据库

    查询所安装的MariaDB组件 xff1a span class token punctuation span root 64 localhost logs span class token punctuation span span cl
  • 【数字图像处理】四种常用的滤波器

    数字图像处理 四种常用滤波器 数字图像处理一 平滑滤波器1 1 基本原理1 2 作用1 3 邻域加权平均实现方式 二 高斯滤波器2 1 基本原理2 2 特点 三 中值滤波器3 1 基本原理3 2 适用场合3 3 实现方式3 4 特点 四 拉
  • 远程X技术初探

    前几天和朋友看到一篇实现远程X的文章 xff0c 就一起尝试了一下 xff0c 基本上成功了 xff0c 具体的过程就写在这篇博客中了 我的机器是64位的Debian Wheezy xff0c 朋友的机器上装的是Arch 实现的思路是先在自
  • Linux安装confluence

    借鉴网址 xff1a Confluence 6 9 0 安装 走看看 一 版本说明 xff1a 1 CentOS 7 0 2 Confluence6 9 xff1a atlassian confluence 6 9 0 x64 bin 链接
  • 面向对象——类和对象

    一 面向对象的概念 面向对象是一种符合人类思维习惯的编程思想 现实生活中存在各种形态不同的事物 xff0c 这些事物之间存在着各种各样的联系 在程序中使用对象来映射现实中的事物 xff0c 使用对象的关系来描述事物之间的联系 xff0c 这