第三章类与对象基础 ① 笔记

1. 内容回顾

1.1. 课前测试

1.2. 上节内容

在这里插入图片描述

2. 本章重点

2.1. 类和对象的概念
2.2. 类的基本组成
2.3. 构造方法
2.4. 成员方法

3. 具体内容

3.1. 类和对象的概念

3.1.1. 什么是对象

在这里插入图片描述
万事万物皆对象。
对象 :我们所面对的可以描述其具体形象的事物称为对象。对象可以简单理解为看得见摸得着的事物。
我们一般从两个方面来描述一个对象:属性(特征),方法(行为)。
属性 :用于描述对象具有的特征
方法 :用于描述对象具有的行为或功能
例如:描述一个电视机对象

属性: 用于描述对象具有的特征
	电视机: 属性(颜色,品牌,价格) 属性值(黑色,小米,2000)
	颜色: 黑色
	品牌: 小米
	价格: 2000
方法: 用于描述对象具有的功能
	电视机:方法/功能(播放电视剧,看电影)
	播放电视剧()
	开机()
	关机()
描述我用的笔记本电脑对象:
	同样的笔记本对象具有相同的属性和方法,但是属性值是不一样的,可以区分不同的对象。
笔记本的属性:
	牌子: thinkpad 480 / 小米
	颜色: 黑色 / 白色
	重量: 2kg / 1.5kg
	cpu: i5 / i7
	内存: 16G / 16G
	硬盘: 128固态+512机械 /512固态
笔记本的方法:
	开机()
	关机()
	写代码()
	授课()
描述你的好朋友: 张三,李四,宿舍房间,床,水杯

3.1.2. 什么是面向对象编程

面向对象程序设计(英语:Object-oriented programming,缩写:OOP)是种具有对象概念的程序编程典范,同时也是一种程序开发的抽象方针。它可能包含数据、属性、代码与方法。对象则指的是类的实例。它将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重用性、灵活性和扩展性,对象里的程序可以访问及经常修改对象相关连的数据。在面向对象程序编程里,计算机程序会被设计成彼此相关的对象

3.1.3 面向过程和面向对象编程

但是在面向对象设计之前,广泛采用的是面向过程,面向过程只是针对于自己来解决问题。面向过程的操作是以程序的基本功能实现为主,实现之后就完成了,也不考虑修改的可能性,面向对象,更多的是要进行子模块化的设计,每一个模块都需要单独存在,并且可以被重复利用,增强可维护性,所以,面向对象的开发更像是一个具备标准的开发模式

举例:
面向过程:针对开发中程序遇到的每一个问题,进行单个的编码解决。
自己做饭,买菜,洗菜,炒菜,自己吃
面向对象:只对结果,不管实现的细节。
到饭馆叫饭,自己吃
学习面向对象其实就是学习如何在代码中使用 封装,继承,多态(重点,背会)。
在面向对象定义之中,也规定了一些基本的特征:
(1)封装:保护内部的操作不被破坏; 安全性
(2)继承:在原本的基础之上继续进行扩充; 复用性
(3)多态:在一个指定的范围之内进行概念的转换。可扩展性
对于面向对象的开发来讲也分为三个过程:
OOA(面向对象分析)、OOD(面向对象设计)、OOP(面向对象编程)。
总结:面向对象最终的目的是在保证功能实现的基础上,方便后期程序的维护。

3.2 类的概念

3.2.1 什么是类

具有相同属性和行为的对象,可以被归为一类

令狐冲:
属性:姓名(令狐冲),性别(男),年龄(28),
方法:会武功(耍剑)

东方不败:
属性:姓名(东方不败),性别(女),年龄(18)
方法:会武功(绣花)

令狐冲和东方不败都具有相同的属性和方法,因此他们可以归为【人类】。

由此:
宝马,奔驰,法拉利也具有相同的属性和行为所以可以归为【车类】。

:将具有相同属性和方法的对象进行抽象,这就是类。
它一般包括了属性和方法两大部分。可以理解为类是对象的设计图纸(房屋设计图,手机设计图)。

在这里插入图片描述

类限定了对象具有的特征属性和行为,因此可以将类看作对象的模板。通过一个类,我们可以创建任意个对象,而被创建的同一个类任意个对象,都具有相同的属性和行为。

在这里插入图片描述

类是对象的模板。对象是类的实例。

类是抽象的概念,对象是具体的存在。

注意:同一个类的对象,会具有相同的属性和方法,但是它们的属性值可以不一样,这样可以区分出不同的对象实体
面向对象编程,为什么要从定义类开始?
因为在创建对象(车/房子)之前,需要先设计对象具有的属性和行为,所以要先把对象所属的类(汽车图纸/房屋图纸)定义出来。通过定义好的类,来创建这个类型的对象(先有月饼模子,再创建月饼出来)。

面向对象编程的步骤:

1.定义所用对象的类型
2.用类型创建具体的对象
3.调用对象的属性和方法,完成程序处理

3.2.2 类的结构

public class 类名{
	//成员属性
	
	//构造方法
	
	//成员方法
8 }

实例

public class Student {
// 属性: 成员属性,成员变量,全局变量
// 姓名
String name;
// 性别
String sex;
// 年龄
int age;
// 身高
double tall;
// 方法: 成员方法,实例方法
public void eat(){
// this:当前对象
System.out.println(this.name+"吃早餐");
}
public void study(){
System.out.println(this.name+"学习java");
}
}

3.2.3 类的使用

使用类创建对象,为对象赋值,并调用对象方法

public class Test {
public static void main(String[] args) {
// 使用类创建对象
Student s1 = new Student();
// 设置对象属性
s1.name="张三";
s1.sex="男";
s1.age = 18;
s1.tall = 1.7;
// 调用对象方法
s1.eat();
s1.study();
Student s2 = new Student();
s2.name="李四";
s2.sex="女";
s2.age = 16;
s2.tall = 1.8;
s2.eat();
s2.study();
}
}

在这里插入图片描述

注意:的属性本质是全局变量,是有默认值的
字符串: null 整形: 0 小数: 0.0 布尔: false
方法内的变量局部变量,不赋值的时候无法使用

面向对象编程的步骤:
1.根据题目定义类: 定义属性和方法
2.使用类
a.创建测试类,定义main方法
b.在main方法中,使用类创建对象: 类名 变量 = new 类名();
c. 使用创建出来的对象,设置对象属性,访问对象属性,调用对象方法
完成特定功能。

在这里插入图片描述

3.3 构造方法

构造方法:在类创建对象的时候,通过new关键字调用的方法称为构造方法。它可以用于为对象属性设置初始值
语法:

public class 类名{

	//无参构造
	public 类名(){
	
	 }

	 //构造方法
	 public 类名(参数列表){
	 // 初始换属性
	 }
 }

 //通过new调用构造方法,创建类的对象
类名 变量 = new 类名();

特征:

1. 构造方法是非常特殊的方法,方法名要与类名完全一样

  1. 构造方法不能写返回值
  2. 构造方法通过new关键字调用
  3. 一个类中,可以定义构造,也可以不定义构造。当类中没有定义构造的时候,系统会提供默认无参构造,当类中定义了构造之后,系统将不再提供默认无参构造
  4. 一个类中可以定义多个构造(可以有参,可以无参)
    作用:
    1.使用类创建对象的时候要调用构造方法
    2.通过构造可以为对象的属性设置初始值,避免漏掉某些属性不赋值
    实例:
public class Student{
	String name;
	int age;
	String sex;
	double height;

	public Student() {}
	
	public Student(String name,String sex,int age,double height) {
		 this.name=name;
		 this.age=age;
		 this.sex=sex;
		 this.height=height;
	 }
	
	 public Student(String name,String sex,int age) {
		 this.name=name;
		 this.age=age;
		 this.sex=sex;
	 }
 }

通过构造方法创建类的对象

 Student stu=new Student("孙悟空","男",19,1.65);

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

构造方法小结:
- 定义构造方法:public + 类名(参数列表){初始化代码}
-当类没有构造方法时,系统会给一个默认的空构造方法
-当你一旦定义了自己的构造方法,系统就收回了默认的构造方法
- 如果还想用默认的构造方法,则必须自己另外定义
- 自定义的构造方法主要用于对象的初始化

3.4 成员方法

构造方法的作用,是为了创建对象。
成员方法是为了实现某个具体的功能: 吃早餐,打游戏,听音乐,学习
语法:

[访问修饰符] 返回值类型 方法名([参数列表]){
	方法体
	return 返回值;
}

说明:
[访问修饰符] : 中括号在语法描述上表示这个部分可以省略
 访问修饰符,表示定义的方法能够被访问的一个范围 。
 属性/方法的访问修饰符: 总共有四个级别 public,protected,默认,private
 返回值类型: 必须要有。取值:
void: 表示这个方法不需要返回结果
其他任何类型(基本类型/引用类型) : 表示方法必须要有返回值,而且返回值的类型要和定义的类型一致
 方法名: 自己定义,按照标识符的规则(字母,数字下划线),要按照小驼峰命名
 参数列表:可以省略,省略的时候表示这个方法不需要参数。如果有参数,那么在调用方法是必须要按照参数列表的定义传递参数。可以是各种类型的数据
 方法体: 方法实现具体功能的代码部分。
 返回值: 要和方法的返回值类型结合使用。
如果返回值类型是void。那么该方法不能有返回值(要么没有reutrn,要么return后面不要写数据)。如果返回值类型不是void,是其他类型: 那么此时方法最终一定要有返回值,而且返回的数据要和返回值类型对应

//无返回值的方法
public void eat(String food) {
	System.out.println(name+"在吃"+food);
 }

//带返回值的方法
 public String buy(double money) {
	 if(money<=1.5) {
		 return "矿泉水";//返回的具体值必须是定义的类型的值
	}else {
		 return "方便面";
	}
}

// 带返回值的方法的调用
String res=stu.buy(5.5);
System.out.println(res);

定义手机类

public class Phone {
// 品牌
String brand;
// 价格
double price;
// 有参构造
public Phone(String brand,double price){
this.brand=brand;
this.price=price;
}
// 成员方法
// 显示手机信息
public void showInfo(){
System.out.println(this.brand+" "+this.price);
}
// 充电
public void chongdian(int hours){
System.out.println("给手机充电:"+hours+"小时");
if(hours<=1){
System.out.println("没充满");
}else{
System.out.println("充满了");
}
}
/**
* 有参有返回值的方法
* 给某人打电话
* @param name : 给谁打电话
* @param min : 打了多少分钟
* @param money: 每分钟多少钱
* @return : 返回一共花了多少钱
*/
public double call(String name,int min,double money){
System.out.println("使用价值"+this.price+"的"+this.brand+"手机,给"+na
double qian = min*money;
return qian;
}

通过测试类,调用方法

public class Test {
public static void main(String[] args) {
// 创建一部手机
Phone p1 = new Phone("小米",2999);
// 调用手机方法
p1.showInfo();
// 充电
p1.chongdian(5);
// 手机打电话
double q = p1.call("周杰伦",5,10.5);
System.out.println("打电话花了:"+q);
Phone p2 = new Phone("华为",3999);
p2.showInfo();
p2.chongdian(1);
double q2 = p2.call("刘德华",10,11.5);
System.out.println("打电话花了:"+q2);
System.out.println("=================");
System.out.println("使用两部手机打电话一共花了:"+(q+q2));
}
}

4. 本章总结

面向对象编程步骤
1). 根据题目要求定义类
2). 根据题目要求定义类中的成员属性, 构造方法,成员方法
3).创建测试类,在测试类的main方法中,使用类创建对象
4).通过对象设置对象属性,通过对象调用对象方法完成特定功能

5. 课后作业

题目1:
编写狗(Dog)类
属性: 名字
颜色
品种
年龄
方法:
展示-display:输出小狗的所有属性
吃eat:没有返回值,根据传入的参数输出“XXX小狗正在吃XXX”
看门-guard:有返回值,根据传入的进门的人的不同返回不同的结果,如果是生人,返回“旺旺”,如 果是主人则返回“摇尾巴”
编写测试类,创建具体狗的对象,测试各个方法。
题目2:
编写程序员(Programer)类
成员属性/成员变量:姓名, 码龄(敲代码的年限), 职位(初级程序眼,高级工程师,架构师)
构造方法:无参构造,有参构造。
成员方法: 自我介绍: 无参无返回值,输出程序员的信息
写代码(项目): 有参无返回值, 输出谁在写什么项目的代码
找bug(时间):有参有返回值,如果找bug的时间超过2小时,返回找到了bug。否则输出没找到bug
加班(时间,每小时加班费): 有参有返回值, 输出谁加班多长时间,每小时多少钱。返回加班费。
编写测试类: 创建两个程序员。设置属性值,调用程序员的方法。最后计算两个程序员一共挣到多少加班费。
题目3:
定义员工类(Emp),属性按照如下表格定义,方法有自我介绍,员工工作,员工休息。
方法细节自己扩展。
根据表格数据,创建员工对象,并完成属性设置和方法调用。

在这里插入图片描述

题目4:
理解并掌握 函数的参数和返回值。
定义一个计算器类(Calc):
要求用四种方式的方法定义实现商品总金额的计算。

示例:
public class Calc{
// 用无参无返回值的方法,实现购买商品计算总金额的功能:购买的商品名,价格,数量,需
// 用无参有返回值的方法,实现购买商品计算总金额的功能:购买的商品名,价格,数量,需
// 用有参无返回值的方法,实现购买商品计算总金额的功能:购买的商品名,价格,数量,需
// 用有参有返回值的方法,实现购买商品计算总金额的功能:购买的商品名,价格,数量,需
}

题目5:
在这里插入图片描述

// A code block
var foo = 'bar';
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值