一. final: 最终
    定义类: 无法被继承(完全自闭) 
    定义方法: 无法被重写(半自闭)
    定义属性: 无法被二次赋值(常量 全大写)  
                
二. 抽象类 abstract                                             
抽象类是怎么诞生的 ? 是因为类中有抽象方法, 才使得这个类【被动的】变成了抽象类
抽象方法是怎么来的 ? 是因为有些方法的方法体根本无法写出实现细节
面积 周长 启动 停止 ....(一概而论)

三. 接口interface 实现implement
子类继承父类    extends
实现类实现一个接口 implement
接口其实就是定义的某个标准, 该标准中必须具有哪些方法
一个类想扩展某个功能, 就必须遵守某个接口的标准, 也就是实现该接口

抽象类是半残废(还有点普通方法可以用)
接口是全残废(没有1个方法能用)

★★★发现接口主要的作用是解决了Java只能单继承的弱点
鸬鹚(鱼鹰) Cormorant
啄木鸟 Woodpecker 
老鹰Hawk

接口特性: 接口支持多继承
Java中类只能单继承, 但是接口反而可以多继承
        
父类: 超类, 基类  
子类: 派生类, 衍生类

抽象类与接口的异同点:
   相同点:
         a. 都有抽象方法
         b. 都不能实例化(new)
         c. 派生类都必须实现抽象方法
   不同点:
         a. 抽象类使用abstract, 接口使用interface
         b. 子类只能继承一个抽象类, 但是可以实现多个接口
         c. 抽象类有构造函数, 接口没有构造函数
         d. 抽象类中有构造, 普通, 抽象方法, 静态方法, 变量常量
             接口中有抽象方法, 常量
         e. 抽象类继承用extends, 接口实现用implement

抽象类和接口同样实行向上转型:
抽象类 对象名 = new 子类();
接口 对象名 = new 实现类();      
抽象类满足的语法: is a(是一个) 狗是一个看门功能
                                狗是一个动物      继承
接口满足的语法: has a(有一个) 狗有一个看门功能   实现
                               狗有一个动物

-------------------------- 异常处理
异常处理是衡量一门语言是否成熟的标准, 也是Java语言的重大特点之一
异常处理能让我们的程序具有健壮性

我们先了解如果没有异常的程序会是什么样 !

一旦产生了异常, 发生异常的语句以及其后语句将不再执行, 默认情况下进行异常信息输出, 自动结束程序执行
我们需要做的异常处理就是如果出现了异常, 也应该让程序正确往下执行结束
如果需要进行Java的异常处理, 需要通过3个关键字来实现:

try : 尝试
 catch : 捕获
 finally : 最终异常处理基本语法结构:
 try{
     可能出现异常的代码
 }catch(异常类 e){  
     异常处理
 }catch(异常类 e){
     异常处理
 }finally{
     无论如何都会执行的代码
 }语法结构: 
 try{} 编译报错
 try{}catch(){}  可以这么写
 try{}finally{} 可以这么写(但是不建议写, 没有catch异常没有意义, 报了错没人处理)
 try{}catch(){}finally{} 可以(完全体)finally关键字的作用: 
     始终都会执行的语句, 一般用于回收系统资源(类似我们在SQL游标中的释放deallocate)关于异常的简单处理:
     显示异常提示语句: e.getMessage() 
     打印异常的堆内存详细信息: e.printStackTrace();