面向对象与面向过程的区别
两者都是一种思想,只是思维方式,思考问题的角度不同
面向过程 : "我该如何实现???" 按照分析出来的实现步骤一步一步实现
面向对象 : "我该找谁来实现???" 关注的就是对象,这个"谁",不关注过程
面向对象是依托面向过程的
面向对象的优点
- 可以将复杂的问题简单化
- 更加贴合我们生活中的思考角度
- 面向过程更加适合执行者,面向对象更加适用于管理者角度
如何使用面向对象的思维方式进行编程:
类 : 定义一系列对象的共性|图纸|模板
对象 : 用来描述现实生活中真实存在的事物
面向对象就是让程序与现实生活紧密联系
三大特性: 封装 继承 多态
类的定义
自定义类|模板类|javabean:
public class 类名{
//成员变量 : 不被static关键字修饰的方法--> 实例变量
修饰符 数据类型 变量名 = 赋值;
//成员方法 : 不被static关键字修饰的方法--> 实例方法
修饰符 返回值类型|void 方法名(参数列表){
方法体;
[return 返回值;]
}
}
成员变量:
静态变量 : 被static修饰的变量为静态变量->类变量
实例变量 : 不被static修饰的变量为实例变量
成员方法:
静态方法 : 被static修饰的方法为静态方法
实例方法 : 不被static修饰的方法
例如 :一个手机类,和测试手机类
分析步骤:
1.手机具有的特点|特征 : 属性|名字 颜色,品牌,尺寸,价格,摄像头个数... -->成员变量|实例变量
2.手机都能做什么: 功能|动词 打电话 打游戏 上网聊天 ,拍照 .... -->成员方法|实例方法手机测试类:
1) 导包 : 指明当前类的位置
import 包名.类名;
位置:类的上面不需要导包的类:
1.java.lang包下的内容
2.同包下的类2) 创建类型的引用|变量--->创建对象 new具有创建对象能力
数据类型 变量名 = new 数据类型();3) 使用
引用.成员变量
引用.成员方法()
跟随对象使用成员
public class Class002_PhoneTest {
public static void main(String[] args) {
//1.创建一个手机对象->描述生活中我自己正在使用的这一台手机
Class001_Phone p1 = new Class001_Phone();
//2.成员变量
p1.color = "白色";
p1.brand = "华为";
p1.size = 6.5;
p1.money = 7000; //mete40pro
System.out.println(p1.color);
System.out.println(p1.brand);
System.out.println(p1.size);
System.out.println(p1.money);
//3.成员方法
p1.call();
}
}
// -----------------------------------不是同一个class文件,但是在同一个包下
public class Class001_Phone {
//成员位置: 类中方法外
//颜色,品牌,尺寸,价格
public String color;
public String brand;
public double size;
public int money;
//打电话
public void call(){
System.out.println("从前有一个人长得像电话,出门就被打了!!!!");
}
}
再例如
蛋糕师制作蛋糕
涉及的事物:
蛋糕
蛋糕师
模板类:
蛋糕类
1)属性: 形状 口味 奶油 价格
2)展示 : 所有的属性打印
蛋糕师类
1) 属性: 姓名 性别 年龄 等级
2) 功能: 制作蛋糕注意:
方法的返回值可以为任意类型
基本数据类型
引用 数据类型(自定义的引用数据类型)
public class Class003_CakeTest {
public static void main(String[] args) {
//蛋糕师
Caker caker = new Caker(); //1) new Caker() 2)对象的地址赋值给了引用caker
caker.name = "xxxx";
Cake cake = caker.make("椭圆形","冰淇淋",10000);
cake.show();
}
}
//蛋糕类
class Cake{
//形状 口味 奶油 价格
public String shape;
public String taske;
public double price;
//展示
public void show(){
System.out.println(shape+"-->"+taske+"-->"+price);
}
}
//蛋糕师
class Caker{
//姓名 性别 年龄 等级
public String name;
public int level;
//制作蛋糕
//返回值: 一个蛋糕--> 蛋糕对象 --> Cake
//参数: 形状,口味,价格String shape,String taske,double price
public Cake make(String shape,String taske,double price){ //shape = 椭圆形 taske = 冰淇淋 price = 10000
//创建一个蛋糕
Cake cake = new Cake();
cake.shape = shape;
cake.taske = taske;
cake.price = price;
//返回一个制作好的蛋糕对象
return cake; //0x00a
}
}
注意:
一个javabean模板类可以创建多个对象,根据需要使用
匿名对象可以使用,但是只能在当前行使用一次//匿名对象 : 只能在当前行使用一次
new Cake().show();
new Cake().show();
注意:
一个方法的形参类型可以为自定义的引用数据类型
所以说方法的形参类型可以为任意类型(基本数据类型|引用数据类型)
//国家类
class Country {
public String countryName;
public String hotel;
}
//其他类
class Other{
public void orderHotel(Country country) {
System.out.println("正在预定" + country.countryName + "的" + country.hotel);
}
}