Java初级--抽象类,接口及对象的类型转换

时间:2021-08-29 10:29:07

24.final 关键字
    在Java 中声明类、属性、和方法时,可使用关键字final 来修饰;
    final 标记的类不能被继承;
    final 标记的方法不能被子类重写;
    final 标记的变量(成员变量或局部变量)即成为常量,且只能赋值一次;
    方法中定义的内部类,只能访问该方法的final 类型的局部变量;
    用final 定义的局部变量相当于是一个常量,它的声明周期超出方法运行的声明周期;
    将一个形参定义成final 也是可以的,这就限定了在方法中修改形参的值。
    public static final 共同标记一个常量时,这个常量就成为全局常量,此时,必须在定义的时候进行初始化;

 

25.抽象类
    Java 中可以定义一些不含方法体的方法,它的方法体的实现交给该类的子类,根据自己的情况去实现,这样的方法就是抽象方法,包含抽象方法的类就是抽象类。抽象类必须用abstract 关键字来修饰,抽象方法也必须用abstract 来修饰。抽象类不能被实例化,也就是不能用new 关键字去产生对象。抽象方法,只需声明,而不需实现。含有抽象方法的类必须被声明为抽象类,抽象类的子类必须覆盖所有抽象方法后才能被实例化,否则这个子类还是个抽象类。


26.接口(interface)
    如果一个抽象类中的所有方法都是抽象的,就可以将这个类用另外一种方式来定义,也就是接口定义。
    接口是抽象方法和常量值的定义的集合,从本质上将,接口是一种特殊的抽象类,这种抽象类中,只包含常量和方法的定义,而没有变量和方法的实现。
    抽象类必须用abstract 关键字来修饰,抽象方法也必须用abstract 来修饰,接口中的成员都是 public 访问类型的,接口里的变量默认是用public static final 标识的。可以定义一个新的接口用 extends 关键字去继承一个已有的接口,也可以定义一个类,使用implements 关键字去实现一个接口中的所有方法,也可以去定义一个抽象类用implements 关键字去实现一个接口中定义的部分方法,一个类可以继承一个父类的同时,实现一个或多个接口,extends 关键字必须位于implements 关键字之前。

 

27.对象的类型转换
    子类对象可以自动转换成父类,而父类转换成子类必须使用强制转换。一个基类的引用类型变量可以指向其子类的对象,一个基类的引用不可以访问其子类对象新增的成员(属性和方法)。可以使用 引用变量 instance of 类名来判断该引用变量所指向的对象是否属于该类或该类的子类。子类的对象可以当作基类的对象来使用,称作向上转型(upcasting),反之称为向下转型(downcasting)。

 

28.面向对象的多态性
    应用程序不必为每一个派生类(子类)编写功能调用,只需要对抽象基类进行处理即可,可以大大提高程序的可复用性。派生类的功能可以被基类的引用变量引用,这叫做“向后兼容”,可以提高程序的可扩充性和可维护性。多态性存在的三个必要条件:
   1)有继承;
   2)有重写
   3)父类应用指向子类对象;

 

29.异常
     异常定义了程序中遇到的非致命的错误,而不是编译时的语法错误,如程序要打开一个不存在的文件,网络连接中断操作数越界,装载一个不存在的类等,操作数越界,装载一个不存在的类等。可以在一个方法中使用throw ,try......catch 语句来实现程序的跳转,一个方法被覆盖时,覆盖它的方法,必须扔出相同的异常或异常的子类,如果父类扔出多个异常,那么重写(覆盖)方法必须扔出那些异常的一个子集,也就是说不能扔出新的异常。
     设计良好的程序应该在异常发生时提供处理这些错误的方法,使得程序不会因为异常的发生而阻断或产生不可预见的后果。Java程序的执行过程如出现异常事件,可以生成一个异常类对象,该异常类对象封装了异常事件的信息,并将被提交给Java 运行时系统,这个过程成为抛出异常。
     当Java 运行时系统接收到异常对象时,会寻找能处理这一异常的代码,并把当前异常对象交给其处理,这一过程称为捕获异常
 JDK 中定义了许多异常类,这些类对应了各种各样可能出现的异常事件。

        ERROR:称为错误,由Java 虚拟机生成并抛出,包括动态链接失败,虚拟机错误等,程序对其不做处理。
        Exception:所有异常类的父类,其子类对应了各种各样可能出现的异常事件,一般需要用户显式的声明或捕获;
        Runtime Exception : 一类特殊的异常,如被0 除,数组下标超出范围等,其产生比较频繁,处理比较麻烦,如果显示的声明或捕获,将会对程序可读性和运行效率影响很大,因此由系统自动检测,并将她们交给缺省的异常处理程序(用户可不必对其处理)。

 

 try 代码段包含可能产生例外的代码,try 代码段后跟有一个或多个catch 代码段,每个catch 代码段声明其能处理的一种特定类型的异常并提供处理的方法。当异常发生时,程序会中止当前的流程,根据获取异常的类型去执行相应的catch 代码段。finally 段的代码无论是否发生异常,都会执行。

 

 在 catch 语句块中,是对异常进行处理的代码,每个try 语句块可以伴随一个或多个catch 语句,用以处理可能产生的不同类型的异常对象。在 catch 中声明的异常对象(catch (someException e))封装了异常事件发生的信息,在catch 语句块中可以使用这个对象的 一些方法获取这些信息。getMessage()方法,用来得到有关异常事件的信息,printStackTrace() 方法,用来跟踪异常事件发生时堆栈的内容。

 

 finally 语句为异常处理提供一个统一的出口,使得在控制流程转到程序的其它部分以前,能够对程序的状态做统一的管理。
 无论try 所指定的程序块是否抛出例外,finally 所指定的代码都要被执行,通常在finally 语句中可以进行资源的清除工作,如关闭打开的文件,删除临时文件等。

 

 Java的例外处理机制使得例外事件例外事件沿着被调用顺序往前寻找,只要找到符合该例外种类的例外处理程序,在一个try 语句块中,基类异常的捕获语句不可以写在子类异常捕获语句的上面。

 

30.包
        package 语句作为Java 源文件的第一条语句,如果没有Package 语句,则为缺省的无名包。
        父包与子包在使用上没有任何关系,import 语句可有多条;
        运行程序时,编译器提示找不到该类,可以从一下几个方面考虑:
              1)程序类名是否写错(大小写问题);
              2)没有import 该报名;
              3)classpath 的问题;