面向对象的语言有五个特色java
<!--一盏电灯是一个程序,灯泡、灯座则为对象-->编程
<!--父类几何体,子类圆形、正方形,子类对象都能收到几何体类型的信息-->浏览器
每一个对象都是定义了特性和行为的某个特定的类
把对象当作服务提供者,有利于造成对象的高内聚
<!--被隐藏的具体实现-->服务器
访问指定词并发
定义:以现有类为基础,复制出副本,并在副本上修改和添加来建立新类函数
副本类称为导出类、继承类、子类插件
<!--发给基类对象的消息同时也能发给导出类-->线程
使基类和导出类差别的两个方法设计
泛化:处理类型的层次结构时,不把对象看成特定类型处理,而是做为基类的对象处理code
<!--好比处理三角形、圆形、矩形,不做为特殊类处理,而是统一当作形状,由于都有绘制、移动等方法-->
面向对象程序设计的最重要妙诀:编译器不可能产生传统意义上的函数调用,而是采用前期绑定和后期绑定的方法
后期绑定:向对象发送消息时,被调用的代码直到运行时才能肯定;再运行前,编译器仅仅确认调用方法的存在、被调用参数和返回值类型检查
因为OOP中,动态绑定是默认行为,因此程序直到运行时才肯定代码的位置;根据消息来肯定具体调用的代码,所以是动态的
多态:同一事物在不一样场景下的多种形态
因为动态绑定是默认行为,因此在运行前没法肯定调用的代码,所以根据消息来执行后期绑定,实现多态
<!--示例代码-->
当draw()消息发到一个匿名Shape时,会基于该Shape的实际类型产生正确的行为
void doSomething(Shape shape){ shape.draw(); shape.rease(); }
Circle circle = new Circle(); Triangle triangle = new Triangle(); Line line = new Line(); doSomething(circle); doSomething(triangle); doSomething(line);
优点
实际开发中,须要选择合适容器,缘由为
范型:参数化类型,使用一对尖括号,中间包含类型信息
ArrayList<Shape> shapes = new ArrayList<Shape>();
向下转型:向下转型成为更加具体的类
<!--好比:Circle是Shape的一个类,可是没法得知某个Object是Shape类仍是Circle类-->
对象的存储
对象的生命周期
异常处理提供了一种从错误状态进行可靠恢复的途径