面向对象 类和对象 封装、继承、多态
面向对象和面向过程
面向对象和面向过程是我们编程中,编写程序的一种思维方式。
- 面向过程:要解决问题时,思考“我该怎么做”,然后一步步实现的过程。
- 例如,打扫教室卫生(扫地、拖地、倒垃圾等),按照面向过程的程序设计方式,会思考“打扫卫生我该怎么做,然后一件件的完成”,最后把教室卫生打扫干净了。
- 面向对象:解决问题时,思考**“我该让谁来做”,然后那个“谁”就是对象**,他是怎么做的不用管,反正最后要把这问题解决。
- 例如,打扫教室卫生(扫地、拖地、倒垃圾等),按照面向对象的程序设计方式会思考“我该让谁来做,如让小红扫地、让小明拖地、让小强倒垃圾等”,这里的“小明、小红、小强”就是对象,他们要打扫卫生,怎么打扫是他们自己的事,反正最后一群对象合力把教室卫生打扫干净了。
- 总结:
- 面向对象思想更符合我们人类思考问题的习惯。
- 面向过程思维方式中更多的体现的是执行者(自己做事情),面向对象中更多的体现是指挥者(指挥对象做事情)。
类和对象
- 对象:指的是具体的事物,比如人,人就不是对象,他只是一个泛指,只有具体的某个人才是一个对象。
- 类:可以是类别的概念。
- 是对具有相同、相似的属性特征、行为、功能的一类事物的信息描述
- 知道类的真正意义就是在描述事物,属性和功能统称为事物中的成员。事物的成员分为两种:成员属性和成员功能。成员属性在代码中的体现就是成员变量;成员功能在代码中的体现就是成员方法 。
- 类是对象的模板,对象是类的具体实例。
类实现:
- 语法: 关键字: class
- 格式:
// 类名首字母大写,驼峰命名
// 由public 修饰的类必须与文件名一致
class 类名{
// 类的内容: 属性 方法
// 属性: 名词 形容词 一个词可以表达清楚的
// 格式: 属性数据类型 属性名; 常量:final 修饰 需要初始化
String name;
// 方法:动词 一段代码块才可以描述清楚
//[方法修饰符] 返回值类型 方法名(参数类型 参数名){ // 方法体 }
int add(int a,int b){
return a+b;
}
}
对象:
-
关键字: new
-
格式: 类名 对象名 = new 类名();
-
创建对象时:
- 在内存中申请一块空间
- 初始化属性 放入内存中
-
对象名 vs 对象
- 在代码中替代对象把程序执行的逻辑串起来 – 代词
- 对象名存储对象的引用地址 ,通过对象名调用对象的属性和方法
-
对象只有在程序运行之后new之后才会有。
面向对象三大特性
封装
- 封装是什么
- 从字面意思理解,封装就是把一个东西给包装起来,你只知道这是一个什么东西,但是这个东西具体是什么样的就不清楚了。
- 封装是面向对象的一个特性,类和方法都体现了这一特性,封装是指将具体细节给隐藏起来,并且对外提供一个可以访问的接口。
- 封装体现
- 方法是一种封装,方法中的代码是其实现细节,对外提供了方法名供访问。
- 类是一种封装,封装了其属性和方法,属性通过private关键字封装,同时设置属性的getxxx(),setxxx()方法来访问属性。
public class people{
private String name; // private属性来限制该属性只能在该类中出现,外界不能直接访问
private String class;
public void setName(String name){
this.name = name; //外界改变name属性的方法
}
public String getAge(){
return name; // 外界通过该方法来获取name属性值
}
// age属性一样设置,这里就不写了
public void study(){
// 方法代码块中就是对功能细节(怎么实现)的封装,方法名就是对外访问的接口。
System.out.println(name + "努力学习中");
}
}
继承
- 概念:通俗的说,继承是指子女继承父母财产。在Java中,继承是指类和类之间的一种关系,一个类继承一个类就是指在一个类的基础上去定义一个新的类,新的类是子类,被继承的类是父类。
- 实现方式 子类 extends 父类
- 继承特点:子类会继承父类的所有成员,可以直接使用父类中的public成员。
public class Employee(){
String name;
int age;
private String id;
public void work(){
System.out.println("工作");
}
}
public class Developer extents Employee(){
}
public static main(Stirng[] args){
Developer de = new Develoter();
de.work();
}
结果会在控制台显示 工作
- 注意
- 虽然子类继承父类的所有成员,但是父类的private属性在子类中不能直接使用,需要通过公共方法来间接访问。
- 继承只能单继承,不能多继承
- 继承可以多层继承,即B继承A,C继承B,则B里面也有A里面的成员。