当你在类中定义变量时,在其前面加上final关键字,那便是说,这个变量一旦被初始化便不可改变,这里不可改变的意思对基本类型来说是其值不可变,而对于对象变量来说其引用不可再变。其初始化可以在两个地方,一是其定义处,也就是说在final变量定义时直接给其赋值,二是在构造函数中。这两个地方只能选其一,要么在定义时给值,要么在构造函数中给值,不能同时既在定义时给了值,又在构造函数中给另外的值。
当函数参数为final类型时,你可以读取使用该参数,但是无法改变该参数的值。
另外方法中的内部类在用到方法中的参变量时,此参变也必须声明为final才可使用
final方法
如果一个类不允许其子类覆盖某个方法,则可以把这个方法声明为final方法。
使用final方法的原因有二:
第一、把方法锁定,防止任何继承类修改它的意义和实现。
第二、高效。编译器在遇到调用final方法时候会转入内嵌机制,大大提高执行效率。
final类
final类不能被继承,因此final类的成员方法没有机会被覆盖,默认都是final的。在设计类时候,如果这个类不需要有子类,类的实现细节不允许改变,并且确信这个类不会载被扩展,那么就设计为final类。
3)this,通常指向当前对象;
4)super,指向父类,如果想引用父类的某种东西时可以使用,此外当super后加参数时,表示调用父类中有相同参数形式的构造函数;
3、抽象类与接口
抽象类:
抽象方法与抽象类必须使用abstract修饰,有抽象方法的类只能被定义为抽象类,抽象类里可以没有抽象方法。
它们遵守的规则:
1 用abstract修饰,且抽象方法没有方法体(注意与空方法体的区别)。
2 抽象类不能实例化,即使该抽象类不包含抽象方法
3 抽象类包含属性、方法、初始化块、内部类、构造器、枚举六种类型。其构造器主要用于被子类调用。
4 包含抽象方法,或者父类包含抽象方法而没有实现,必须定义为抽象类。
abstract不能修饰属性和构造器,不能与static同时使用,也不能和private同时使用。
接口:
其修饰符可以是public或默认的包权限访问控制符。
接口中可以包含属性(只能是常量),方法(只能是抽象方法),内部类(包括内部接口)和枚举类定义
接口中的所有成员都是public权限(也可以省略不写),而接口中的属性则默认是public static final。
一个Java源文件中最多只有一个public接口,且与该源文件的主文件名相同。
实现接口的方法时只能使用public权限,因为子类重写父类方法或实现接口方法是访问权限只能更大或者相等
总结:声明方法的存在而不去实现它的类被叫做抽象类(abstract class),它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量,其类型是一个抽象类,并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。Abstract 类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。取而代之,在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。
接口(interface)是抽象类的变体。在接口中,所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的,没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类相似,除了该实现类不能从接口定义中继承行为。当类实现特殊接口时,它定义(即将程序体给予)所有这种接口的方法。然后,它可以在实现了该接口的类的任何对象上调用接口的方法。延边红十由于有抽象类,它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口类型或从接口类型转换,instanceof 运算符可以用来决定某对象的类是否实现了接口。
阅读(693) | 评论(0) | 转发(0) |