1.类、对象和消息等基础知识
2.比较开发者和用户眼中类的区别
3.通过继承创建多态引用变量
4.抽象类和接口的区别
5.创建Try、catch处理异常
面向对象的特性:封装、继承、多态。
类: 由变量和作用于变量的方法组成类。一个类在单个实体中封装了被动组件(字段)和主动组件(方法),封装增加了程序的模块性。
方法描述:提供给用户了解方法的所有信息,包括precondition,postcondition,方法标题。类的开发者要确保方法描述为类的用户提供了足够的信息。
对象:也称作类的实例,是具有类的字段的变量,可以调用类的方法。在Java语言中,对象总是通过引用变量来间接访问的。
消息:在面向对象用语中,消息是指对象对一个方法的调用。
数据抽象:将类向用户提供的功能和怎样实现这些功能进行分离的过程。
数据抽象原则:用户代码无法访问所使用类的实现细节。
用户主要关心的是类提供了什么,而不是类的具体实现过程。
类的开发者应当创建功能完备的方法,使得用户无需关心任何实现细节。
从开发者的观点看,类由字段和对字段进行操作的方法组成,从用户的观点看,类由方法描述组成。
静态变量:也称作类变量,被类的所有实例共享,利用修饰符static将一个变量指定为静态变量。
在java语言中,每个文件最多只能有一个公共类,公共类的名字必须和文件名字相同。
继承:是指定义一个新的类,在其中包含现有的类的所有字段以及部分或全部方法。现有的类称作超类、父类、基类,新的类称作子类。子类可以通过对超类中的方法提供不同的定义来覆盖现有方法。
开放关闭原则:每个类应当是开放的(通过继承扩展)和关闭的(对现有应用程序稳定)。
继承和构造函数:构造函数对类的实例进行初始化。因此,构造函数不会继承。
但是当调用子类的构函数时,子类的构造函数首先自动调用超类的默认构造函数。(确保至少来自超类的字段进行默认初始化操作。)
如果超类没有默认构造函数,具有一个参数构造函数,这时子类的构造函数中第一个语句必须显示地调用超类的构造函数。
多态:对于多态性,消息调用的方法取决于对象运行时的类型。当消息传递时,调用方法的版本取决于对象的类型,而不是引用变量的类型。
例:类D是类A的子类,并且D覆盖类A的scan方法,如果found是一个boolean变量,值在运行时确定
A a;
if(found)
a=new A();
else
a=new D();
a.scan();
在表达式a.scan()中,到底激活哪个scan方法,在编译时尚无法确定,因为直到运行时才能确定a是A对象的引用变量还是D对象的引用变量。即,a是一个多态性引用变量。
接口和抽象类的区别
声明方法的存在而不去实现它的类被叫做抽象类(abstract class),
它用于要创建一个体现某些基本行为的类,
并为该类声明方法,
但不能在该类中实现方法的情况。
不能创建abstract 类的实例。
然而可以创建一个变量,
其类型是一个抽象类,
并让它指向具体子类的一个实例。
不能有抽象构造函数或抽象静态方法。
Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类。
接口(interface)是抽象类的变体。
在接口中,所有方法都是抽象的。
多继承性可通过实现这样的接口而获得。
接口中的所有方法都是抽象的,
没有一个有程序体。
接口只可以定义static final成员变量(作为常量)。
接口的实现与子类相似,
除了该实现类不能从接口定义中继承行为。
当类实现特殊接口时,
它定义所有这个接口的方法。
然后,它可以在实现了该接口的类的任何对象上调用接口的方法。
由于有抽象类,
它允许使用接口名作为引用变量的类型。
区别:
1)子类只能继承一个基类,但可以实现多个接口
2)抽象类中可以有非抽象函数,接口中所有的方法都是抽象的。
3)接口中的成员变量都是static final,作为常量使用。
4)子类可以不是实现抽象基类的全部方法(此时子类也是抽象类),但必须实现接口中所有的方法
共同点
1)允许使用接口名作为引用变量的类型来调用类,
允许使用抽象类名作为引用变量类型来调用子类
异常处理:
异常是在特殊条件下创建的对象,通常是进行无效处理是创建的。当创建异常对象时,正常的控制流暂停;弹出异常。控制立即转移到控制异常的代码。异常处理通常取决于特定的异常,可能包括显示错误消息、终止程序、采取其他操作甚至什么都不做。
一个考虑周全的程序不会因为用户的无效输入而忽然终止。Java语言的异常处理特性让程序避免几乎所有的不正常终止。