一、面向对象的思想
1、什么是面向对象
说到面向对象,与之相应的还有面向过程的。接下来我会顺带讲解面向过程。通过两者的比较,有利于更好的了解 |
1.1 面向过程
什么是面向过程?
【举个栗子😊】 一件事儿- 用面向过程的角度来看,把大象装进冰箱。他的步骤和顺序有: 1->打开冰箱、2->把大象塞进去、3->关闭冰箱门 这里我们着重这件事的步骤和动作
📌 面向过程 强调过程和过程中所涉及的行为(强调行为、动作、过程)
1.2 面向对象
什么是面向对象?
【举个栗子😃】 同样以上个例子为例,把大象放到冰箱这个行为。我们主要是对冰箱这个对象进行一系列操作的。所以我们可以把这些动作赋给冰箱。比如打开冰箱、存入大象、关闭冰箱等功能。
📌 面向对象 强调把一些细化的步骤组合起来称为一个整体,把功能封装到对象,由一个实例化的对象去实现这些操作,强调具备功能的对象。
在面向对象的编程思想中,往往会涉及类和对象这两个概念,下面就会给大家讲述类和对象的概念以及用法 |
二、类和对象
2 .1 类
什么是类
?? 类是对现实生活中的具有共同属性和行为的抽象 
🚩打个比方:猫这个字就好比一个类,因为它是所有猫类的统称。它是对一些具体品种猫的统称和概括。 
2.1.1 类的组成
??类由 属性和行为构成。学了类之后我们以后脑海中始终要有连锁反应——提到类,就马上想到属性和行为。
?? 属性: 是对象具有的各种特征,每个对象的每个属性都有特定的值。
打一个手机的比方。手机就好比是一个类,手机有不同的品牌,有小米、苹果、魅族;有颜色,有黑色、白色;有不同的价格,有2999的、有3999的; 那么在这里品牌、颜色、价格就是手机的属性。因为每部手机都具有这些特征。 
?? 行为: 是对象能够执行的操作
同样,比如说手机,手机能执行什么操作呢?手机可以打电话、发信息、拍照等。因此打电话、发信息、拍照就是类的行为。 
2 .2 对象
什么是对象 ?? 万物皆是对象,对象是对类的实例化。
如上面猫的比方。猫是一个抽象的类。那么猫的对象就可以具体到某一个实实在在的、看的见的猫。 
三 、类和对象在代码中的运用
3.1 类的应用
类由属性和行为构成: ?? 属性在类中用成员变量来体现(类中方法外的变量) ?? 行为在类中用成员方法来体现(相比前面的方法去掉static)
3.1.1 类定义的格式
 下图是一个实际应用: 
代码块
public class iphone {
String brand;
String model;
double price;
public void call(){
System.out.println("打电话");
}
public void senMessage(){
System.out.println("发信息");
}
}
3.2 对象的应用
3.2.1 创建对象的格式以及调用

代码块
public class iPhonetest {
public static void main(String[] args) {
iphone p= new iphone();
p.brand="苹果";
p.price=5999;
p.model="ipad pro 2021";
System.out.println("品牌:"+p.brand);
System.out.println("型号: "+p.model);
System.out.println("价格:"+p.price);
p.call();
p.senMessage();
}
}
3.3 成员变量和局部变量
1、成员变量: ?? 类中且方法外的变量。 成员变量又分为: 1?? 类变量(静态变量): 被static所修饰的成员变量,是属于类的部分,属于类的范畴。
2??实例变量(非静态变量): 没有被static修饰的成员变量,是属于类的部分,但是属于对象的范畴。
2、局部变量: ?? 定义在方法中的变量,属于方法的范畴。比如方法内定义的形参,方法内定义的变量。
3.3.1 成员变量和局部变量的区别
区别 | 成员变量 | 局部变量 |
---|
类中位置不同 | 类中且方法外 | 方法内或声明上 | 内存中位置不同 | 堆内存 | 栈内存 | 生命周期不同 | 随着对象的存在而存在,随着对象的消亡而消亡 | 随着方法的调用而存在,随着方法的调用完毕而消亡 | 初始化不同 | 有默认的初始化 | 没有默认初始化值,必须先定义,赋值,才能使用。 |
四、封装
4.1 封装概念
??用关键字private将类中的某些信息隐藏在类的内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的访问和操作。 
目的:直接通过对类对象的操作来达到目的,不需要对具体实现十分了解,让类的属性和方法具体实现对外不可见,起到保护作用。 
4.2 封装的实现
封装实现的步骤 
在前面介绍过,封装是使用关键字private来对类的某些信息进行隐藏,在外部使用提供的set()、get()方法来进行调用。下面我们将会从private开始讲起。
4.2 private关键字
private ?? 是一个权限修饰符 ?? 可以修饰成员(成员变量和成员方法) ?? 作用是保护成员不被别的类使用,被private修饰的成员只在本类中才能访问。针对private修饰的成员变量,如果需要被其他类使用,提供相应的操作。  封装代码
String name;
private int age;
public void setAge(int a){
if(a<0||a>100){
System.out.println("你输入的年龄有误");
}else {
age=a;
}
}
public int getAge(){
return age;
}
public void Get(){
System.out.println(name+","+age);
System.out.println("打遍天下无敌手");
}
测试类代码
public class StudentTest {
public static void main(String[] args) {
Student p= new Student();
p.name="林青霞";
p.setAge(30);
p.Get();
}
}
?? 注意 方法调用方法要在主函数内进行。
|