面向对象

面向对象

1. 学习要求

1. 琐碎语法需要【背诵】
	abstract static private public protected final interface implements 
2. 会以下内容,面向对象你已经掌握
	a. 会定义类
	b. 会创建对象 new 对象
	c. 会使用对象调用成员变量
	D. 会使用对象调用成员方法
	E. 要什么,给什么,用什么,拿什么

2. 面向对象的生活逻辑

喝咖啡
	1. 买
		a. 给我媳妇说,帮我买个咖啡
		b. 等
		c. 喝
	2,自己做
		a. 虹吸壶方式 咖啡豆(苏门答腊黄金曼特宁 埃塞尔v  比亚) 研磨机 杯子 秤
		b. 称出来 15g 咖啡豆
		c. 选择中度研磨
		d. 虹吸壶方式制作
		e. 品尝
		25分钟.....

烤羊排:
	1. 买
		a. 北环 私烤者馕坑烤肉
		b. 等
		c. 吃
		d. 埋单
		
	2. 自己做
		a. 选用 宁夏盐滩羊 孜然 洋葱 辣椒粉 烧烤粉 
		b. 腌制 洋葱 孜然粉 辣椒粉,烧烤粉 盐一丢丢
		c. 整扇烤制,可以加入一些土豆 烤箱 210度 25分钟
		d. 烤到15分钟 翻面
		e. 准备配料 盐,孜然粉 烧烤粉 辣椒粉
		f. 吃
		g. 打扫
面向对象:
	找合适的人,做合适的事
面向过程:
	亲力亲为,自力更生,体验人生疾苦

3. 类和对象

对象
人类 马云爸爸,麻花藤,郭德纲,乔布斯,詹姆斯·高斯林,康熙,彭于晏,某振阳
狗类 哮天犬,可鲁可,我家豆豆,忠犬八公,神犬小七,王可可
猫类 尿尿,Tom,加菲猫,HelloKitty,噬元兽,我家八九
车类 我的天空灰领克两驱01(豫V81DQ9),藤原拓海的AE86, 我哥的沃尔沃S90
类:
	一类事物的统称,描述事物对应的属性和行为
对象:
	具体的,唯一的,独立的个体

4. Java中定义类的格式

格式:
	class 类名 {
		成员变量; ==> 描述当前类对应事物的【属性】
		成员方法; ==> 描述当前类对象事物的【行为】
	}
4.1 成员变量
/*
自定义类,类名 Person 
类名要求见名知意,大驼峰命名法
*/
class Person {
	// 【成员变量】
	/*
	name 成员变量,String 是字符串类型,描述 Person 类 name 属性。
	没有具体的数值,仅作为属性描述操作。表示 Person 有对应的数据
	*/
	String name;
	
	/*
	age 成员变量,int 基本整型,描述 Person 类的 age 属性。
	*/
	int age;
	
	/*
	gender 成员变量(性别),char 字符类型,描述 Person 类的 gender 属性。
	*/
	char gender;
}
4.2 成员方法
// 【成员方法】 Method
/**
* 描述吃饭行为,所需参数为 String 类型,提供食物的名称
*
* @param food 字符串类型数据,提供食物的名称
*/
public void eat(String food) {
	System.out.println("中午吃" + food);
}

/**
* 睡觉行为描述
*/
public void sleep() {
	System.out.println("我要和床长相厮守");
}

/**
* 写代码描述
*/
public void coding() {
	System.out.println("我们指尖跳动的不是代码,而是money");
}

5. Java 创建对象的方式

比葫芦画瓢
	Scanner sc = new Scanner(System.in);
	创建了一个 Java 扫描器 Scanner 类对象 ,对象名 sc
	Scanner 类名 符合大驼峰命名法
	sc 对象名
	new:
		1. 根据数据类型所需,在内存的【堆区】申请内存空间
		2. 清理申请内存空间中的所有数据,打扫卫生
	Scanner():
		构造方法 Constructor
		名称: 类名,Java中规定,有且只有构造方法可以使用类名作为方法名称,该名称可以提供给 new 关键字明确当前
		创建的数据类型是哪一个。
		构造方法作用:
			1. 方法名 对应类名 提供数据类型
			2. 用于类对象初始化操作。

创建对象的格式:
	类名 对象名 = new 类名(必要参数);
		类名(必要参数); ==> 构造方法  Constructor
/*
创建一个 Person 类对象
	类名 对象名 = new 类名(必要参数);
Person 自定义类名
person Person 类对象,对象名期望带有数据类型指向性,严格遵从
	   标识符命名规范,见名知意,小驼峰命名法
new 
	1. 申请空间 2. 清理空间数据
Person()
	构造方法,当前构造方法没有参数
	Person类的无参数构造方法。
*/
Person person = new Person();

/*
Person@15db9742
	Person 数据类型名,为自定义类 Person
	@ 在哪里
	15db9742 十六进制内存地址
*/
System.out.println(person);

6. 通过类对象操作成员变量

比葫芦画瓢
	int[] arr = new int[10];
	arr.length ==> 获取当前数组的 容量
	. ==> 的

总结:
	类对象.成员变量名称
	可以取值,可以赋值
// 通过类对象操作成员变量 [赋值,取值]
// 注意 【数据类型一致化】
person.name = "苟磊";
person.age = 16;
person.gender = '男';

System.out.println("Name:" + person.name);
System.out.println("Age:" + person.age);
System.out.println("Gender:" + person.gender);

7. 通过类对象调用成员方法

比葫芦画瓢
	Scanner sc = new Scanner(System.in);
	int num = sc.nextInt();
	double num2 = sc.nextDouble();

格式:
	对象名.成员方法(必要参数);
// 通过类对象调用成员方法
person.eat("烤羊排");
person.sleep();
person.coding();

8. 构造方法【不重要的知识点】

8.1 Java编译自动提供无参数构造方法

8.2 程序员【显式】定义构造方法
Java编译器不再提供无参数构造方法使用
8.3 构造方法格式和作用
格式:
	public 类名(初始化参数) {
		初始化语句
	}

作用:
	1. 和 new 关键字一起使用,用于创建对象操作。构造方法没有创建对象的能力。
	2. 构造方法和 new 关键字一起使用过程中,提供必要的数据类型名称。
	3. 构造方法可以在创建对象过程中,对于成员变量或者其他内容,进行必要的初始化操作。
		例如: 手机出厂默认的铃声。
	4. 创建对象无法绕开构造方法。

new关键字作用
	1. new + 构造方法 ==> 创建对象
	2. new 关键字根据构造方法名称对应的数据类型,计算当前对象所需内存空间大小,在内存的【堆区】申请对应空间
	3. 空间中的所有数据,全部擦除干净。
8.4 构造方法参数赋值成员变量问题
String name;

// 有参数构造方法,给予 name 成员变量进行赋值操作
public SingleDog(String name) {
	/*
	成员变量可以直接在类内的方法中使用。【80%正确】
	*/
	name = name;
	System.out.println("String 类型参数构造方法");
}
/*
目前情况下,在构造方法中的所有变量名为 name 的内容都是当前方法的参数变量 name,没有任何一个 name 指向的是成员变量内容。【就近原则问题】

解决方案:
	使用 this 关键字区分成员变量和局部变量
*/

// 修改之后!!!
public SingleDog(String name) {
	/*
	成员变量可以直接在类内的方法中使用。【80%正确】
	*/
	this.name = name;
	System.out.println("String 类型参数构造方法");
}
8.5 十二生肖模版
要求:
	1. 每一个类对应三个或者三个以上成员变量
	2. 每一个类对应三个或者三个以上成员方法,必须保证有一个成员方法至少有一个参数
	3. 每一个类必须有三个或者三个以上的构造方法,并且强制要求有一个无参数构造方法
	4.【重点】成员变量名称所有类不可重复
	5.【重点】成员方法名称所有类不可重复
	6. 每一个类单独一个文件
	7. 每一个类必须使用所有构造方法,创建对应对象,并且使用创建对象,调用所有成员变量数据进行展示,和所有成员方法进行执行。
	8. 每一个方法,必须有对应的标准文档注释!!!
class Cat {
	// 每一个类提供三个或者三个以上成员变量,12生肖不允许重复成员内容。
	String name;
	int age;
	char gender;
	
	// 每一个类提供三个或者三个以上的构造方法,必须有无参数构造方法。
	/**
	* Cat 类无参数构造方法
	*/
	public Cat() {}
	
	/**
	* 初始化 name 成员变量构造方法
	*
	* @param name String 类型参数用于初始化 name 成员变量
	*/
	public Cat(String name) {
		this.name = name;
	}
	
	/**
	* 初始化 name , age, gender 成员变量构造方法
	*
	* @param name   String 类型参数用于初始化 name 成员变量
	* @param age    int 类型参数用于初始化 age 成员变量
	* @param gender char 类型参数用于初始化 gender 成员变量
	*/
	public Cat(String name, int age, char gender) {
		this.name = name;
		this.age = age;
		this.gender = gender;
	}
	
	// 每一个类提供三个或者三个以上成员方法,12生肖不允许重复成员方法内容
	/**
	* 吃饭行为描述
	*
	* @param food 食物
	*/
	public void eat(String food) {
		System.out.println("可爱的小猫咪吃" + food);
	}
	
	/**
	* 玩耍行为描述
	*/
	public void play() {
		System.out.println("猫玩球");
	}
	
	/**
	* 睡觉行为描述
	*/
	public void sleep() {
		System.out.println("猫仰天大睡");
	}
}

class Demo3 {
	public static void main(String[] args) {
		// 利用三个构造方法,分别创建对应的对象
		Cat cat1 = new Cat();
		Cat cat2 = new Cat("八九");
		Cat cat3 = new Cat("八九", 3, '母');
		
		// 利用三个对象,分别展示其中的数据保存情况,并且调用成员方法
		System.out.println("Name:" + cat1.name);
		System.out.println("Age:" + cat1.age);
		System.out.println("Gender:" + cat1.gender);
		cat1.eat("罐头");
		cat1.play();
		cat1.sleep();
		System.out.println();
		
		System.out.println("Name:" + cat2.name);
		System.out.println("Age:" + cat2.age);
		System.out.println("Gender:" + cat2.gender);
		cat2.eat("罐头");
		cat2.play();
		cat2.sleep();
		System.out.println();
		
		System.out.println("Name:" + cat3.name);
		System.out.println("Age:" + cat3.age);
		System.out.println("Gender:" + cat3.gender);
		cat3.eat("罐头");
		cat3.play();
		cat3.sleep();
		System.out.println();
	} 
}

posted @ 2022-03-10 17:53  qtyanan  阅读(36)  评论(1编辑  收藏  举报