final关键字:-----最后的,最终的
(1)可以修饰类,此类变为终结类,不能派生子类(不能有子类)。如System Math String。
(2)可以修饰变量,此变量变为常量,值不能改变。
(3)可以修饰方法,此方法不能被重写,允许在本类中被重载。
(4)可以修饰对象,此对象的引用地址不能再改变,但是对象的值允许改变。
abstract 关键字:------抽象的,模糊的
使用abstract修饰的类叫抽象类,抽象类允许有构造方法,数量可以是0或者多个,虽然有构造方法,但是不能直接创建对象。
使用abstract修饰的方法叫做抽象方法,抽象方法只能存在抽象类或者接口当中。
抽象类中存在抽象方法的话,其子类必须是抽象类或者在子类中重写该抽象方法。如果再有其他的类继承此子类,则重写以上两个或者多个类的多个抽象方法。
注意:
(1)抽象类可以含有0个或多个抽象方法。
(2)抽象类允许有构造方法,但是不允许直接创建对象,需借助子类。对象的向上转型,为父类实例化对象。
(3)一个类中存在抽象方法,则这个类必为抽象类。
(4)子类如果是抽象类,则不是必须重写抽象方法。
(5)abstract方法不能有方法体。
题外话:成员变量只有在创建对象时,才会为其分配空间,如果还没创建对象就进行运算,会出现编译错误。
接口:
(1)在接口中只能定义抽象方法,在JDK1.8之后允许定义静态方法。
(2)接口定义抽象方法,可以省略abstract关键字。如:public void aMethod();
(3)接口定义的成员属性,只能是全局静态常量 。如 :final static int a;
(4)接口定义的抽象方法,不允许使用private,final修饰。原因:子类不能重写使用private和final修饰的方法。
(5)接口定义的抽象方法和静态常量,权限修饰符是public,即使不写,默认的也是public。
(6)接口也不允许直接使用new创建对象,需要借助子类完成。
(7)接口只能是被实现或者不能被实现,接口允许被多个类实现。
接口的定义格式:
interface:接口名称{
全局常量;
抽象方法;
}
注意:抽象类和接口都可以实例化,也就是创建对象,必须借助子类来完成。抽象类是可以有构造函数的,子类可以调用父类的构造函数。
抽象类和接口的区别:
(1)抽象类中可以有构造函数,接口中不能有构造方法。
(2)抽象类中可以有普通成员变量,接口中没有普通成员变量。
(3)抽象类中可以包含非抽象的普通方法,接口中的所有方法必须是抽象的,不能有非抽象的普通方法。
(4)抽象类中的抽象方法的访问类型可以是public,protected,(默认类型在eclipse中不报错,但应该不行),在接口中的抽象方法只能是public类型,默认也是public abstract类型。
(5)抽象类中可以包含静态方法,接口在JDK1.8版本后可以包含静态方法。