62.面向对象回顾
1)面向对象的软件开发方法
- 软件系统即各种对象的集合
- 按对象设计出来的系统结构较文档
- 子系统相对独立,提高了软件的可维护性
- 支持封装、继承和多态,提高了软件的可重用性和扩展性
2)万物皆对象
- 软件系统所模拟的真实世界中,所有的实体都可以抽象为对象
- 每个对象都是唯一的
63.对象
- 对象具有属性和行为(方法)
- 对象具有状态
1)状态指某个瞬间对象各种属性的取值
2)对象的方法可以改变对象自身的状态
- 对象都是属于某个类,每个对象都是某个类的实例
64.类
- 类是一组具有相同属性和行为的对象的抽象
- 开发人员自定义数据类型
- 面向对象编程的主要任务就是定义各个类
- 对象是类的实例,类是对象的模板
65.面向对象三大特征
面向对象三大特征
- 封装
- 继承
- 多态
封装
- 隐藏对象的属性和实现细节,仅仅对外公开接口
- 便于使用者正确的方便理解和使用系统
- 有助于各种系统之间的松耦合,提高系统独立性
- 提高软件的可重用 性
- 把尽可能多的东西藏起来,对外提供便携的接口
- 把所有的属性藏起来
继承
- 子类、父类
子类继承了父类的部分属性和方法
子类还可以扩展出新的属性和方法
子类还可以覆盖父类中方法的实现方式
- 注意
继承的层次不可太多,尽量两到三层
继承的最上层最好抽象
多态
- 多态
多种实现方式提供服务
- 向上转型
把引用变量转换为父类类型
- 向下转型
把引用变量转换为子类类型
Pet pet=new Dog(); //向上转型
Dog dog=(Dog)pet; //向下转型
Animal animal=pet; //向上转型
多态绑定机制
- 静态绑定
静态方法(静态绑定机制)与引用变量声明的类型绑定,实际上在编译阶段就做了绑定
成员变量(包括静态变量和实例变量,静态绑定机制)与引用变量声明的类型绑定,实际上在编译阶段就做了绑定
- 动态绑定
实例方法(动态绑定机制)与引用变量实际引用的对象绑定,调用重写后的方法,由运行时JVM决定
//Father类
public class Father {
int var1=10;
static int staticVar=9;
public void m1(){
System.out.println(“父类中的实例方法m1”);
}
public static void staticM1(){
System.out.println(“父类中的静态方法m1”);
}
}
//Son类
public class Son extends Father{
int var1=100;
static int staticVar=90;
public void m1(){
System.out.println(“子类重写父类的方法m1”);
}
public static void staticM1(){
System.out.println(“子类中的静态方法m1”);
}
public static void main(String[] args) {
//多态的绑定机制
//向上转型,父类引用指向子类对象
Father f=new Son();
//实例方法(动态绑定机制)与引用变量实际引用的对象绑定,调用重写后的方法,由运行时JVM决定
f.m1();
//静态方法(静态绑定机制)与引用变量声明的类型绑定,实际上在编译阶段就做了绑定
f.staticM1();
/*//通过类名可以调用各自的静态方法,非多态绑定(普通类名调用方法)
Father.staticM1();
Son.staticM1();*/
//成员变量(包括静态变量和实例变量,静态绑定机制)与引用变量声明的类型绑定,实际上在编译阶段就做了绑定
System.out.println(f.var1);
System.out.println(f.staticVar);
}
}