面向对象基础

  • image

面向对象的三大特征:封装、继承、多态

任务 1:实现类的基本操作

面向对象的基本概念

类 是抽象的,是概念的,代表一类事物;是数据类型\\对象 是具体的,实际的,代表一个具体事物;是实例\\类 是 对象 的模板,对象 是 类 的一个个体,对应一个实例

1. 面向对象

面向对象是一种直观而且程序结构简单的程序设计方法,他比较符合人类认识现实世界的思维方式

其基本思想是把问题看成是有若干个对象组成,这些对象之间是独立的,但又可以相互配合、连接和协调,从而完成整个程序要实现的任务和功能

2. 对象

对象,是真实存在的具体东西

对象是用来描述客观事物的一个实体,用面向对象方法解决问题时,要对现实世界中的对象进行分析与归纳,找出哪些对象与要解决的问题是相关的

3. 类

类,是对象共同特征的描述;

类是具有相同属性和方法的一组对象的集合。类定义了对象将会拥有的特征 (属性) 和行为 (方法)

一个类给出它的全部对象的一个统一的定义,而他的每个对象则是符合这种定义的一个实体因此类和对象的关系就是抽象个和具体的关系

类是多个对象进行综合抽象的结果,是实体对象的概念模型,而对象是一个类的实例

定义类

自定义类也是一种数据类型

类图

  • image

面向对象设计的过程就是抽象的过程,一般分 3 步来完成\\( 1 ) 发现类,类定义了对象将会拥有的特征 (属性) 和行为 (方法)\\( 2 ) 发现类的属性,对象所拥有的静态特征在类中表示时称为类的属性\\( 3 ) 发现类的方法,对象执行的操作称为类的方法

1. 定义类

[ 访问修饰符 ] class 类名{ \\ 内部代码\\ }

2. 属性

[ 访问修饰符 ] 数据类型 属性名

示例\\创建 “ 人 ” 类,并为 “ 人 ” 类添加相应属性

  • image

3. 方法

[ 访问修饰符 ] 返回类型 方法名称 ( 参数类型 参数名 1,参数类型 参数名 2,. . . . . .) {\\ 方法体代码\\ }

示例\\请在 “ 人 ” 类中定义方法,描述人工作的行为

  • image

创建和使用对象

  • image

必须先设计类,才能获得对象

1. 创建对象

类是一类事物的集合和抽象,代表这类食物共有的属性和行为\\一个对象称为类的一个实例,是类一次实例化的结果

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

2. 使用对象

在 Java 中,要引用对象的属性和方法,需要用 “ . ”

对象名 . 属性\\对象名 . 方法名 ( )

3. 对象数组

示例\\定义包含 3 个元素的随想数组,数组类型为 Person,并使用 for 循环遍历输出

  • image

所有对象调用方法时,后面都会有()\\字符串中有计算长度的方法,数组中没有计算长度的方法

任务 2 :升级类的功能

成员方法\\成员方法、成员变量

1. 带参数的方法\\在实际应用中经常使用带参数或有返回值的方法

示例\\在 Person 类中定义工作的方法,并通过参数接收工作理念

  • image

示例\\在 Person 类中定义工作的方法,并返回工作理念

  • image

2. 方法重载

  • image

( 1 ) 方法重载的定义\\方法重载是指在一个类中定义多个同名的方法,但要求每个方法具有不同的参数类型或参数个数

示例\\定义一个不带参数的 work( ) 方法,再定义一个带参数的 work( ) 方法,观察和二者的区别

  • image

( 2 ) 方法重载的特点\\ 在同一类中\\ 方法名相同\\ 参数的个数或类型不同\\ 方法的返回值不能作为判断方法之间是否构成重载的依据

( 3 ) 方法重载的使用

示例\\调用工作的方法

  • image

( 4 ) 方法重载的优点\\方法重载其实是对原有方法的一种升级,可以根据参数的不同,采用不同的实现方法,而且不需要编写多个名称,简化了类调用方法的代码

带参方法注意事项

方法定义处的参数叫形式参数(形参),方法调用处传的值叫实际参数(实参)

带参方法,参数个数可以有一个,也可以有多个,多个参数之间用逗号隔开

带参方法,参数名字可以随意取,符合变量命名规则形参和实参名字可以不一样,但是数据类型要一致,个数要一样顺序要一样

方法有没有参数和方法有没有返回值,是两码事,毫无关系

当基本数据类型传入方法中改变其值时,main 方法中值不会改变\\如果为引用数据类型,方法中对其值放生改变,main 方法中也会改变

成员变量

this 使用

使用 this 调用成员变量,解决成员变量和局部变量的同名冲突

使用 this 调用重载的构造方法,只能在构造方法中使用,且必须是构造方法的第一条语句

因为 this 是在对象内部指代自身的引用,所以 this 只能调用实例变量、实例方法和构造方法,不能调用类变量和类方法,也不能调用局部变量

类中调用无参构造方法 this()\\类中调用有参构造方法 this ( 参数1、参数2、.........)\\类中调用属性值 this . 属性名\\类中调用方法 this . 方法名\\类中调用无参方法 this . 方法名()\\类中调用有参方法 this . 方法名 ( 参数1、参数2、.........)

如果在构造方法中调用其他构造方法 this () 语句不许放在第一行

1. 成员变量作用域\\类中的属性,也就是直接在类中定义的变量称作成员变量,它定义在方法的外部

示例

  • image

2. 局部变量作用域\\定义在方法中的变量

3. 成员变量和局部变量的区别

作用域不同

局部变量的作用域仅限于定义它的方法,在该方法外无法访问它。

成员变量的作用域在整个类内部都是可见的,所有成员方法都可以使用它,如果访问权限允许,还可以在类外部使用成员变量

初始值不同

对于成员变量,如果定义中没有给它赋予初始值,Java 会给它一个默认值,基本数据类型的值为 0,引用类型为 null。

但是 Java 不会给局部变量赋予初始值,因此局部变量必须要定义并赋值后在使用

  • 在同一个方法中,不允许有同名的局部变量\\\\在不同的方法中,可以有同名的局部变量
  • 在同一个类中,局部变量可以和成员变量同名,并且在使用时,局部变量具有更高的优先级
  • 4. 数据类型\\\\引用数据类型:类、数组、接口
    • 示例\\\\基本数据类型和引用数据类型的区别

    • 对于基本数据类型,不同的变量会分配不同的存储空间,并且存储空间中存储的是该变量的值。赋值操作传递的是变量的值,改变一个变量的值不会影响另一个变量的值
    • 对于引用数据类型,赋值是把原对象的引用传递给另一个引用。对数组而言,当用一个数组名直接给另一个数组名赋值时,相当于传递了一个引用,此时,这两个引用指向同一个数组,也就是指向同一内存空间
  • 构造方法
    • 执行机制
      • 创建对象的时候由虚拟机调用,不能手动调用构造方法
      • 每创建一次对象,就会调用一次构造方法
    • 1. 构造方法的定义
      • 构造方法也叫构造器、构造函数\\\\在创建对象的时候给成员变量进行数据的初始化
      • [ 访问修饰符 ] 方法名 ( [ 参数列表 ] ) { 方法体 ; }
      • 构造方法没有具体的返回值\\\\默认构造方法没有参数,因此参数列表可选\\\\构造方法的方法名与类名相同
      • 示例\\\\为 Person 类定义一个构造方法

    • 如果定义了一个或多个构造方法,Java 不会自动添加默认构造方法
    • 2. 构造方法重载
      • 示例\\\\使用构造方法重载和一般方法重载等技术实现信息的输出

    • 构造方法的种类、作用
      • 无参数构造方法:初始化对象时,成员变量的数据均采用默认值
      • 有参数构造方法:初始化对象时,同时可以为对象进行赋值
    • 注意事项
      • 任何类定义出来,默认就带了无参数构造器
      • 一旦定义了有参数构造器,无参数构造器就,没有了,此时就需要自己去写无参数构造器
      • 建议在任何时候都手动写上 无参数 和 有参数 的构造方法
  • 任务 3:在控制台输出人员信息
    • 将 person 类的属性私有化\\\\为私有属性添加 setter/getter ( ) 方法\\\\设置必要的读取限制
    • 封装
      • 告诉我们如何正确设计对象的属性和方法
      • 对象代表什么,就得封装对应的数据,并提供数据对应的行为
      • 让编程变得很简单,有什么事,找对象,调方法就行
      • 降低我们的学习成本,可以少学、少计,不用去记对象有哪些方法,需要时去找就行
    • 好处
      • 1、便于使用者正确使用系统,防止错误修改属性
      • 2、有助于系统之间的松耦合,提高系统独立性
      • 3、提高软件的可重用性
      • 4、降低了构建大型系统的风险
    • 1. 封装概述
      • 封装的实质就是将类的状态信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问
      • 封装反映了事务的相对独立性,有效避免了外部错误对此对象的影响,并且能对对象使用者由于大意产生的错误操作起到预防作用
      • 封装的好处在于隐藏类的实现细节,让使用者只能通过程序员规定的方法来访问数据,可以方便地加入存取控制修饰符,来限制不合理操作
    • Private 关键字
      • 是一个权限修饰符
      • 可以修饰成员
      • 被 Private 修饰的成员只能在本类中才能访问
      • 针对 Private 修饰的成员变量,如果需要被其他类使用,就要提供相应的操作
      • 提供 setter(参数),给成员变量赋值,用 public 修饰
      • 提供 getter(),获取成员变量的值,用 public 修饰
    • 2. 封装地步骤
      • 1. 修改属性的可见性
        • 示例\\\\将Person 类的属性私有化

      • 私有 private: set 赋值 get 获取
      • 2. 设置 setter/getter()方法\\\\可以手动添加,也可以使用组合键 Ctrl+Shift+S
        • 示例\\\\为 Person 类中的私有属性添加 setter/getter()方法

      • 3. 设置属性的存取限制
        • 示例\\\\为 setter 方法设置限制

  • 任务 4:使用包改进信息输出
    • 新建包\\\\将定义好的类分别放入不同的包中\\\\导入包
    • 1. 包的概述
      • 包允许将类组合成较小的单元,易于找到和使用相应的类文件
      • 防止命名冲突:Java 中只有在不同包中的类才能重名。不同的程序员命名同名的类在所难免。有了包,类名就容易管理了
      • 包允许在更广的范围内保护类、数据和方法。根据访问规则,包外的代码有可能不能访问该类
    • 2. 包的定义
      • 语法:package 包名
      • 编码规范
        • 一个唯一的包名前缀通常是全部小写的ASCII字母,并且是一个顶级域名 com、edu、gov、net、org,通常使用组织的网络域名的逆序
        • 包名的后续部分依不同机构各自内部的规范不同而不同。这类命名规范可能以特定目录名的组成来区分部门、项目、机器或注册名
    • 3. 包的使用
      • 示例\\\\使用包将 Person 类和 PersonTest 类进行分类

      • 声明包的含义是声明当前类所在的包\\\\导入包的含义是声明在当前类中要使用到的其他类所在的包
  • 任务 5:使用访问修饰符
    • 1. 类和类成员的访问控制
      • 包实际上是一种访问控制机制,通过包来限制和制约类之间的访问关系\\\\访问修饰符也同样可以限制和制约类之间的访问关系
      • 1. 类的访问修饰符

      • 2.类成员的访问修饰符

    • 2. static 关键字
      • 一个类可以创建 n 个对象。如果 n 个对象中的某些数据需要共用,就需要使用 static 关键字修饰这些数据
        • 1. 用 static关键字修饰属性
          • 用 static 修饰的属性称为静态变量或者类变量,没有使用 static 修饰的属性称为实例变量
          • 示例\\\\将 Person 类的 name、gender、age 属性保留,新建一个 static 修饰的属性,并调用

          • 在实际开发中,用 static 关键字修饰属性的最常用场景就是定义使用 final 关键字修饰的常量。使用 final 关键字修饰的常量在整个程序运行时都不能被改变,和具体的对象没有关系
          • 常量名一般有大写字母组成\\\\声明常量时一定要赋初值
        • 2. 用 static 关键字修饰方法
          • 用 static 修饰的方法称为静态方法或者类方法,不用 static 关键字修饰的方法称为实例方法
        • 在静态方法中不能直接访问实例变量和实例方法\\\\在实例方法中可以直接调用类中定义的静态变量和静态方法
      • 添加笔记
        • static 修饰的无论是方法还是属性,都属于类级别,也就是说可以通过类名直接 . 出对应的方法或属性
        • 被 static 修饰的变量,在内存中只有一个拷贝\\\\类内部,可在任何方法内直接访问静态变量,其它类中可以直接通过类名访问
        • 没有被 static 修饰的变量,每创建一个实例,就会为实例

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值