提到面向对象,自然会想到面向过程,面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤逐一一实现,使用的时候依次调用就可以了。
面向对象则是把构成问题的事务按照是规则划分为多个独立的对象,然后通过调用对象的方法来解决问题。当然,一个应用程序会包含多个对象, 通过多个对象的相互配合实现应用程序的功能,这样当应用程序功能发生变动时,只需要修改个别的对象就可以了,从而使代码维护更容易。
例如:
我们要把大象放进冰箱,我们需要三步:1、人打开冰箱门2、把大象放进去3、关上冰箱门
面向过程:
![](https://i-blog.csdnimg.cn/blog_migrate/64a36c123adcb8681dde5b4beca4ca35.png)
面向对象的话,我们必须先要找一些对象(我们也可以简单的理解为物体),然后定义对象的功能(方法)
对象:人、冰箱、大象
![](https://i-blog.csdnimg.cn/blog_migrate/b068c670b1ed9076690f93f772d8c58a.png)
面向对象的一个好处就是当我们需要把大象放进微波炉时我们只要把对象中的冰箱换成微波炉就可以了。
面向对象的特点主要可以概括为以下三种:
1.封装性
封装是面向对象的核心思想,它有两层含义:一层含义是指把对象的属性和行为看成是个密不可分的整体,将这两者“封装”在一起(即封装在对象中); 另层含义是指“信息隐藏”,将不想让外界知道的信息隐藏起来。例如,驾校的学员学开车,只需要知道如何操作汽车,无须知道汽车内都是如何工作的。
2.继承性
继承性主要描述的是类与类之间的关系,通过继承,可以在无须重新编写原有类的情况下,对原有类的功能进行扩展。例如,有一个汽车类, 该类描述了汽车的普通特性和功能,进一步再产生轿车类, 而轿车类中不仅应该包含汽车的特性和功能,还应该增加轿车特有的功能,这时,可以让轿车类继承汽车类,在轿车类中单独添加轿车特性和方法就可以了。继承不仅增强了代码的复用性、提高了开发放率,证降低了程序产生错误的可能性,为程序的维护以及扩展提供了便利。
3.多态性
多态性是指在一个类中定义的属性和方法被其他类继承后 ,它们可以具有不同的数据类型或表现出不同的行为,这使得同一个属性和方法在不同的类中具有不同的语义。例如,当听到“Cut”" 这个单词时,理发师的行为是剪发,演员的行为是停止表演,不同的对象所表现的行为是不一样的。多态的特性使程序更抽象、便捷,有助于开发人员设计程序时分组协同开发。
对象的创建与使用
1、类名 对象名称=null;
对象名称=new 类名();
2、类名 对象名称= 对象名称=new 类名();
在这里new的作用是在堆内存中开辟内存空间(因为数据一定要存放才能使用),数据可以理解为属性
方法不能存储在堆内存中。
开辟出之后就是给对象中的属性赋予默认值
栈内存 | 堆内存 | ||
str2 | name=null | ||
age=0 | |||
id=0 |
我们就举一个例子
StudenT str2=new StudenT();
赋予默认值后就将创建的studenT对象地址赋值给变量str2.(栈内存)
package 面向对象Example;
public class StudenT {
long id; //声明id属性
String name; //声明姓名属性
int age; //声明年龄属性
void Study() { //创建方法(不是属性)
System.out.println("正在学习...");
}
void eat() {
System.out.println("正在吃饭...");
}
void sleep() {
System.out.println("正在睡觉...");
}
}
然后在这个包里在创建一个类
package 面向对象Example;
public class Teacher {
String name;
int age;
void teach()
{
System.out.println("开始上课...");
}
}
最后我们就可以在这个包里创建一个测试类
package 面向对象Example;
public class teachdeam01 {
public static void main(String[] args) {
Teacher str1=new Teacher(); //str1为对象名称
StudenT str2=new StudenT();
str1.name="老黄";
str1.age=45;
str2.name="人工小智能";
str2.age=18;
str2.id=22050735010l;
System.out.println("我是:"+str1.name+",今年"+str1.age);
System.out.println("我是:"+str2.name+",今年"+str2.age);
}
}
运行结果
![](https://i-blog.csdnimg.cn/blog_migrate/db2124ff79e50094d5c9b77e1420e7b2.png)